[英]Why do these two numpy.divide operations give such different results?
[英]Why do the same operations on numpy and python list get different results?
我尝试用numpy数组和其元素完全相同的列表上的第二个元素的值替换第一个元素的值,但是得到的结果不同。
1)在一个numpy数组上测试:
test=np.array([2,1])
left=test[:1]
right=test[1:]
test[0]=right[0]
print('left=:',left)
我得到: left=: [1]
2)在python列表上测试:
test=[2,1]
left=test[:1]
right=test[1:]
test[0]=right[0]
print('left=:',left)
我得到: left=: [2]
谁能解释为什么结果不同? 提前致谢。
切片(用冒号索引)将一个numpy数组返回到numpy数组中,因此当您以后更新test [0]的值时,它将更新left的值,而left的值只是该数组中的一个视图。
当您分割成python列表时,它只会返回一个副本,因此当您更新test [0]的值时,left的值不会改变。
这样做是因为numpy数组通常非常大,并且创建大量数组副本可能会非常麻烦。
为了进一步解释numpy数组的James Down,可以使用.copy()
如果您确实想要复制而不是数组切片的VIEW。 但是,当您制作副本时,必须在重新分配test[0]=right[0]
后重新制作left的副本以获得新值。
另外,关于列表方法,您设置了test [0] = right [0],因此,如果在分配后print (list)
,则会得到[1 1]
而不是原始的[2, 1]
。 正如James所指出的, left
是列表项的副本,因此不会随着列表的更改而更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.