python - 如何替换 NumPy 数组中的单行
问题描述
我想在通过函数修改后用同一行替换 NumPy 数组的一行。
这是我的代码:
def _softmax(z):
array = np.exp(z)
array = np.divide(array,np.sum(array))
return array
a = np.array([[1,2,3,4],[5,15,4,7]])
n =_softmax(a[0])
print(n)
a[0]= n
print(a[0])
我得到以下结果:
[0.0320586 0.08714432 0.23688282 0.64391426]
[0 0 0 0]
如您所见,n
可以,但a[0]
不会改变,除了[0,0,0,0]
. 但是,如果我尝试:
a[0] = np.array([4,3,2,1])
...它工作得很好。
解决方案
原因是因为a
最初是 type np.int64
,而你的 softmax 的输出是np.float
. 您必须将 NumPy 数组的精度更改为a
,np.float
或者将分配到的第一行a
向下转换为整数精度:
a = np.array([[1,2,3,4],[5,15,4,7]], dtype=np.float)
最初使用 type 创建它的原因np.int64
是因为您的所有值都是整数。只要将其中一个更改为浮点数,数组就会提升为浮点数:
In [9]: a = np.array([[1,2,3,4],[5,15,4,7]])
In [10]: a.dtype
Out[10]: dtype('int64')
In [11]: a = np.array([[1.0,2,3,4],[5,15,4,7]])
In [12]: a.dtype
Out[12]: dtype('float64')
请注意,我将值的精度更改1
为1.0
. 如果您愿意,您可以这样做,而无需明确指定类型。NumPy 计算出数组结构中包含的内容,并推断出与所提供的所有信息匹配的最佳类型。
最后,一旦我们遍历我们得到的所有内容:
In [14]: a
Out[14]:
array([[ 0.0320586 , 0.08714432, 0.23688282, 0.64391426],
[ 5. , 15. , 4. , 7. ]])
推荐阅读
- docker - 无法下载 Docker 映像 - 没有这样的主机
- oracle-adf - 如何在视图条件之外的 selectManyChoice LOV 中允许选择然后取消选择
- java - 如何使用正则表达式仅捕获具有特定格式的有效句子的第一个单词?
- flutter - 我怎样才能制作这样的个人资料页面..?
- hive - 执行两个 tHiveRow 组件后,第一个组件仍在写入数据,而第二个组件已开始移动导致问题的数据
- java - 在我单击 SearchView 之前,ListView 不会显示
- logging - 即使禁用了日志文件捕获,Pytest 也会捕获日志文件
- python-3.x - 将文件转换为 DataFrame,然后为多个 DataFrame 应用函数
- fortran - 编写一个接受任何两个数字(任何实数或任何整数)的函数
- git - 如何在 git 分支中获取给定作者的提交消息历史记录?