我正在嘗試計算多個 3x3 矩陣的特征值和特征向量。我有 6 個 (e11, e12, e13, e22, e23, e33) mxn 形狀的矩陣,每個 3x3 矩陣都是使用這 6 個矩陣中的每個元素形成的。這 6 個矩陣中的元素數以千計。現在我只是遍歷這些矩陣并在每次通過時創建一個 3x3 矩陣并計算特征值和特征向量,計算需要將近 10 分鐘。我知道一定有更好的方法。我不是 python 方面的專家,所以任何有助于加快我的代碼速度的幫助將不勝感激。
請參閱下面的代碼:
for i in range(0,m):
for j in range(0,n):
E = np.array([ [e11[i][j], e12[i][j], e13[i][j]],
[e12[i][j], e22[i][j], e23[i][j]],
[e13[i][j], e23[i][j], e33[i][j]] ])
e_val, e_vec = np.linalg.eig(E)
uj5u.com熱心網友回復:
如果我創建一組 (3,4) 陣列,我可以將它們與
In [149]: e11,e12,e22 = [np.ones((3,4))*i for i in range(1,4)]
In [150]: E1=np.stack((np.stack([e11,e12],-1), np.stack([e12,e22],-1)),-1)
In [151]: E1.shape
Out[151]: (3, 4, 2, 2)
可以傳遞eig給生產:
In [153]: np.linalg.eig(E)[0].shape
Out[153]: (3, 4, 2)
我會讓你概括到你的 (3,3) 案例
uj5u.com熱心網友回復:
根據@hpaulj 的建議,我將代碼修改如下,將計算時間從 10 分鐘減少到 40 秒。
E = np.stack([
np.stack([e11,e12,e13],-1),
np.stack([e12,e22,e23],-1),
np.stack([e13,e23,e33],-1)],-1)
e_val, e_vec = np.linalg.eig(E)
所以現在e_val和e_vec分別具有所有特征值和特征向量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453072.html
上一篇:在資料面板中生成列模式
下一篇:如何添加和使用“Numpy”庫?
