這是我的代碼的最小版本:
SP=np.array([[-0.4,.2,1],[-.34,.31,1],[-.22,-.2,0],[.8,.25,0],[.92,-.42,1]])
dt=0.1
SP0=SP[:,0]
print("SP0 = ",SP0)
SP[:,0]=SP[:,0]*cos(dt) SP[:,1]*sin(dt)
print("SP0 = ", SP0)
SP[:,1]=SP[:,1]*cos(dt)-SP0*sin(dt)
輸出:
SP0 = [-0.4 -0.34 -0.22 0.8 0.92]
SP0 = [-0.37803498 -0.30735306 -0.2388676 0.82096169 0.8734738 ]
從上面可以看出,我正在嘗試根據它們以前的值進行進化SP[:,0],SP[:,1]但是為了將以前的值SP[:,0]放入SP[:,1](因為它在移動到之前被更改SP[:,1])我首先將它存盤在SP0.
但這似乎沒有任何區別,因為我稍后更改后的值SP0也會更改為新的。但這很奇怪,因為只有在我將它的值存盤在.SP[:,0]SP[:,0]SP[:,0]SP0
為什么會發生這種情況,我該如何正確地進化SP[:,1]和SP[:,0]?
uj5u.com熱心網友回復:
Numpy 切片不會創建新陣列;他們將視圖回傳到原始陣列中。修改任何一個都會影響另一個。
要保留以前的值,請呼叫.copy()視圖:
SP0=SP[:,0].copy()
uj5u.com熱心網友回復:
在 Python 中,重用變數名通常被視為一種不好的做法。
在您的情況下,我建議您只需將您的操縱陣列分配給一個新變數。這應該可以解決您的問題,因為您可以在下一個計算步驟中簡單地參考您的初始值。
uj5u.com熱心網友回復:
切片時參考 Numpy 陣列,這意味著修改將更新所有參考,因此復制內容
所以你可以打電話np.copy(SP[:,0])或SP[:,0].copy()任何你覺得容易的事。
作業示例
import numpy as np
import math as m
SP=np.array([[-0.4,.2,1],[-.34,.31,1],[-.22,-.2,0],[.8,.25,0],[.92,-.42,1]])
dt=0.1
SP0 = np.copy(SP[:,0])
print("SP0 = ", SP0)
SP[:,0] = SP[:,0] * m.cos(dt) SP[:,1] * m.sin(dt)
print("SP0 = ", SP0)
SP[:,1] = SP[:,1] * m.cos(dt) - SP0 * m.sin(dt)
輸出
SP0 = [-0.4 -0.34 -0.22 0.8 0.92]
SP0 = [-0.4 -0.34 -0.22 0.8 0.92]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494393.html
