0
我對np 2D數組中的元素值更改有疑問。在這裏,我有例如:python np數組更改for循環中的元素值
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, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
這意味着有與原始陣列沒有變化。這是否意味着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]])
所以我don'y明白我爲什麼[:]可以在這裏工作,如果我是複製。如果這個問題重複,請提供鏈接? 謝謝。
感謝您的回覆,_in place_ modification的含義是什麼?我同意我保留對a元素的引用,這意味着我和a具有相同的內存地址。如果我在for循環中指定'i = np.array([0,0,0,0,0])',這意味着i和np.array([0,0,0,0,0])具有相同的內存地址,然後我和一個沒有相同的內存地址。所以我的修改不會影響一個。是對的嗎? –
正如你將'a [x] = 1'改變索引'x'的值一樣,你可以通過使用一個覆蓋列表'a'的切片來同樣地改變整個列表(就地表示相同的對象) [:] = [...]'。是的,我會說對的 –