如何替换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]之外不会改变。  但是,如果我尝试:

a[0] = np.array([4,1])

...效果很好。

qinyong4004 回答:如何替换NumPy数组中的一行

之所以这样,是因为a最初是np.int64类型的,而softmax的输出是np.float。您必须将NumPy数组a的精度更改为np.float,否则将对a第一行的赋值下转换为整数精度:

a = np.array([[1,2,3,4],[5,15,4,7]],dtype=np.float)

最初使用类型np.int64创建它的原因是因为所有值都是整数。只要将其中之一更改为浮点,数组就会升为浮点数:

In [9]: a = np.array([[1,7]])

In [10]: a.dtype
Out[10]: dtype('int64')

In [11]: a = np.array([[1.0,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.        ]])
本文链接:https://www.f2er.com/3140931.html

大家都在问