我是python的初学者。我正在尝试修改一个numpy数组,但不知何故它没有被修改。这是我的程序
def test_numpy(x):
count = 0
for i in x:
i-=np.max(i)
i=(np.exp(i)/np.sum(np.exp(i)))
print "The value of i is "
print i
x[count] = i
count+=1
print "the value of x is "
print x
if __name__ == "__main__":
test_numpy(np.array([[1,2],[3,4]])).
它输出的输出是:
i的值为 [0.26894142 0.73105858] x的值为 [[0 0] [3 4] 我的价值是 [0.26894142 0.73105858] x的值为 [[0 0] [0 0]]
我假设x的值应被i的值覆盖。因此,在循环两次之后,x的值应变为 ([0.26894142 0.73105858],[0.26894142 0.73105858])但是,该值不会以某种方式被覆盖。谁能在这里指出我的错误
答案 0 :(得分:2)
当您这样做:
i=(np.exp(i)/np.sum(np.exp(i)))
您正在创建一个新变量,而不是在适当位置更改数据。您忘记告诉Python修改数据了:
i[:]=(np.exp(i)/np.sum(np.exp(i)))
答案 1 :(得分:0)
您的输入数组的类型为int
,因此无法保存任何浮点数。您必须提供一个float数组:
q=np.array([[1,2],[3,4]], dtype=float)
test_numpy(q)
print q
或者您不更改数组,而是创建一个新数组,那么将自动正确选择结果类型:
def test_numpy(x):
x = np.exp(x - x.max(axis=1)[:, None])
return x / x.sum(axis=1)[:, None]
q = np.array([[1,2],[3,4]])
a = test_numpy(q)
print(a)