我有一个关于np2d数组元素值变化的问题。我举个例子:
a=np.arange(10).reshape(2,5)
for i in a: # go through the rows of array
i=np.array([0,0,0,0,0])
print a
返回值为
^{pr2}$这意味着原始数组没有变化。这是否意味着for循环中的i是数组a的每一行的副本?如果我是副本,那么这是有意义的,因为副本的更改不会影响原始值。但我尝试以下代码:
a=np.arange(10).reshape(2,5)
for i in a: # go through the rows of array
i[:]=np.array([0,0,0,0,0])
print a
返回的结果是
array([[0, 0, 0, 0, 0],
0, 0, 0, 0, 0]])
所以我不明白为什么我[:]可以在这里工作,如果我是复制品。如果这个问题是重复的,你能提供链接吗? 谢谢。在
i
不是副本。请记住,for
循环重复地从iterable中的项分配到目标列表(位于in
的左侧)。{eem>在每个这里:
将
a
中的每个子数组分配给名称i
,然后立即将该名称分配给一个完全无关的对象。在那个循环中尝试i = 'unrelated'
,注意除了将i
分配给一个新的字符串对象外,它没有任何效果(我的意思是对a
)之外。在第二种情况将
^{pr2}$a
中的子数组连续地分配给i
,但随后通过引用i
执行就地修改。 更清楚地说,第二种情况的第一次迭代与:第二次迭代:
还请注意,在从第一次迭代到第二次迭代的转换中,
i = a[1]
没有修改之前的引用a[0]
,而是将名称i
重新分配给一个新对象a[1]
。在相关问题 更多 >
编程相关推荐