首页 > 解决方案 > 如何替换 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])

...它工作得很好。

标签: pythonnumpy

解决方案


原因是因为a最初是 type np.int64,而你的 softmax 的输出是np.float. 您必须将 NumPy 数组的精度更改为anp.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')

请注意,我将值的精度更改11.0. 如果您愿意,您可以这样做,而无需明确指定类型。NumPy 计算出数组结构中包含的内容,并推断出与所提供的所有信息匹配的最佳类型。

最后,一旦我们遍历我们得到的所有内容:

In [14]: a
Out[14]:
array([[ 0.0320586 ,  0.08714432,  0.23688282,  0.64391426],
       [ 5.        , 15.        ,  4.        ,  7.        ]])

推荐阅读