无法在python中修改numpy数组

时间:2018-12-16 12:54:59

标签: python numpy

我是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])但是,该值不会以某种方式被覆盖。谁能在这里指出我的错误

2 个答案:

答案 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)