为什么子部分数组会通过单独替换影响主数组,但在向量化时不会影响主数组?
例如,如果代码是:
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
答案 0 :(得分:3)
答案 1 :(得分:3)
X = X * 3 + 1
不修改原始数组,因为它不会就地修改X
。
想象:
Y = X * 3 + 1
你不会指望这会改变原来的阵列,对吗? X = X * 3 + 1
是同一种表达方式。它不会更改X
本身,它只是将局部变量X
的值更改为全新的数组。
如果要修改原始数组,可以执行以下操作:
X *= 3
X += 1
这将在X
的内部运作,因此会更改Z
。
答案 2 :(得分:0)
正如Ashwini Chaudhary所提到的,切片Numpy数组会返回原始数组的视图,但是当你运行X=X*3+1
时,X再也不是Z的视图了,X的引用已更改,因此即使运行X*=3
之后也不会更改Z