簡體   English   中英

將不同的值附加到循環結果僅在最后一個值的列表中

[英]Appending varying values to loop results in list of last value only

我正在模擬一個隨機移動的 position,並希望創建一個 position 的列表。我隨機創建一個開始 position,然后向這個開始 position 添加隨機大小的步長:

import numpy as np

pos_range=1E-6
position=pos_range*np.random.rand(2)

steps=10
step_size=20E-9;

position_list=[]

for i in range(0,steps):
    step=step_size*np.random.rand(2)
    position+=step
    print(position)
    position_list.append(position)

打印的結果是

[6.47220682e-07 2.84186976e-07]
[6.48019947e-07 2.89315337e-07]
[6.50324286e-07 2.96818080e-07]
[6.64316483e-07 3.10052685e-07]
[6.79662022e-07 3.20408865e-07]
[6.85052985e-07 3.31529075e-07]
[6.97773479e-07 3.45764518e-07]
[7.11152822e-07 3.46809336e-07]
[7.14484731e-07 3.54165996e-07]
[7.20412104e-07 3.58339358e-07]

這是我想要的結果。 但是 position_list 只包含所有行中最后一個 position 值的相同數據:

    position_list
array([[7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07],
       [7.20412104e-07, 3.58339358e-07]])

我懷疑它與 numpy 數組如何存儲在 memory 或列表和 numpy 數組的混合中有關。 我嘗試過的所有解決方法都很乏味,而且我很想知道為什么這段代碼不能按預期工作。

改變

position_list.append(position)

position_list.append(list(position))

position += step修改position到位。 您一遍又一遍地將相同的 object 附加到position_list

我們可以通過查看position_list中唯一的 object id 集合來確認這一點。

>>> set(map(id, position_list))
{1637236197296}

有一個簡單的解決方法。 position += step更改為position = position + step 這避免調用numpy.ndarray.__iadd__

另見Is i = i + n truly the same as i += n?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM