为什么子数组通过个别替换影响主数组,而矢量化时不影响主数组?你知道吗
例如,如果代码是:
import numpy as np
Z =np.array(
[[0,4,0,0,0,0],
[0,0,0,1,0,0],
[0,1,0,1,0,0],
[0,0,1,1,0,0],
[0,0,0,0,0,0],
[0,0,0,0,0,0]])
print Z
X= Z[1:4,0:3]
X[0][0]=9
print X
print Z #<=== X affects Z
X=X*3+1
print X
print Z #<=== X do not affect Z
X = X * 3 + 1
不会修改原始数组,因为它不会就地修改X
。你知道吗想象一下:
你不会认为这会改变原来的数组吧?
X = X * 3 + 1
是同一种表达式。它不会改变X
本身,它只是将局部变量X
的值更改为一个全新的数组。你知道吗如果要修改原始阵列,可以执行以下操作:
这将在
X
的内部操作,因此会改变Z
。你知道吗正如Ashwini Chaudhary提到的,切片Numpy数组返回原始数组的视图,但是当您运行
X=X*3+1
时,X不再是Z的视图,X的引用被更改,因此即使之后运行X*=3
也不会更改Z这是因为切片Numpy数组会返回原始数组的视图,因此修改它也会影响原始数组。你知道吗
从docs:
相关问题 更多 >
编程相关推荐