python np数组在for循环中更改元素值

2024-09-29 23:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于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]])

所以我不明白为什么我[:]可以在这里工作,如果我是复制品。如果这个问题是重复的,你能提供链接吗? 谢谢。在


Tags: oftheingofornp副本数组
1条回答
网友
1楼 · 发布于 2024-09-29 23:20:56

i不是副本。请记住,for循环重复地从iterable中的项分配到目标列表(位于in的左侧)。{eem>在每个>。在

这里:

for i in a: 
    i = np.array([0,0,0,0,0])

a中的每个子数组分配给名称i,然后立即将该名称分配给一个完全无关的对象。在那个循环中尝试i = 'unrelated',注意除了将i分配给一个新的字符串对象外,它没有任何效果(我的意思是对a)之外。在

第二种情况将a中的子数组连续地分配给i,但随后通过引用i执行就地修改。 更清楚地说,第二种情况的第一次迭代与:

^{pr2}$

第二次迭代:

i = a[1]
i[:] = np.array([0,0,0,0,0])

还请注意,在从第一次迭代到第二次迭代的转换中,i = a[1]没有修改之前的引用a[0],而是将名称i重新分配给一个新对象a[1]。在

相关问题 更多 >

    热门问题