为什么我不能在numpy中更改3d数组的元素?

时间:2017-05-30 16:55:15

标签: python numpy

import numpy as np

weights = np.random.standard_normal((2,2,3))
b = weights
c = weights
c[0,1,:] = c[0,1,:] + [1,1,1]

print b[0,1]
print ('##################')
print c[0,1]
print ('##################')
print (np.sum(b-c))

结果是

[ 1.76759245  0.87506255  2.83713469]
##################
[ 1.76759245  0.87506255  2.83713469]
##################
0.0

Process finished with exit code 0

如您所见,元素尚未更改。 为什么呢?

提前致谢

1 个答案:

答案 0 :(得分:0)

实际上,他们的确发生了变化。问题是您引用了同一个对象,并且仅在更改后查看它。如果您在copy()上使用b,则会看到更改前的值。 bc与当前代码中的对象相同; Is Python call-by-value or call-by-reference? Neither.在更广泛的意义上是一个不错的读物。

import numpy as np

weights = np.random.standard_normal((2,2,3))
b = weights.copy() # Create a new object
c = weights
c[0,1,:] = c[0,1,:] + [1,1,1]

print b[0,1]
print ('##################')
print c[0,1]
print ('##################')
print (np.sum(b-c))