使用 numpy 从多个矩阵创建 3x3 矩阵以进行特征值和特征向量计算是否有更快的方法?
Is there a faster way of creating 3x3 matrices from multiple matrices for eigenvalue and eigenvector calculations using numpy?
我正在尝试计算多个 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)
如果我创建一组 (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) 案例
根据@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
分别具有所有特征值和特征向量。
我正在尝试计算多个 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)
如果我创建一组 (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) 案例
根据@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
分别具有所有特征值和特征向量。