我有一個3d網格。在每個網格點,我有一個矩陣。我想用python在每個網格點上找到這個矩陣的特徵值和特徵向量。我正在做這樣的事情。矩陣在每個網格點的特徵值
import numpy as np
from numpy import linalg as LA
n = 256
s = np.zeros((3,3,n,n,n))
#s is calculated by a formula here, this part is correct
e = np.zeros((3,n,n,n))
e[0:3,:,:,:] = LA.eigvals(s[0:3,0:3,:,:,:])
它提供了以下錯誤,
1 n = 256
2 e = np.zeros(((3),n,n,n))
----> 3 e[0:3,:,:,:] = LA.eigvals(s[0:3,0:3,:,:,:])
ValueError: could not broadcast input array from shape (3,3,256,256) into shape (3,256,256,256)
由於它是一個大陣,使用循環正在採取了大量的時間。我實際上必須爲許多這樣的立方網格做這件事。有沒有辦法避免循環?代碼必須明白,在每個網格點上,有一個矩陣的特徵值是需要的,它不是一個5交叉矩陣。
' LA.eigvals'接受一個形狀爲'(...,M,M)'的矩陣,其中最後的兩個維度是計算特徵值的座標軸(參見[docs](https://docs.scipy。組織/ DOC/numpy的/參照/生成/ numpy.linalg.eigvals.html#numpy.linalg.eigvals))。在這種情況下,不要擔心預分配'e',這是錯誤來自哪裏。每個網格點的矩陣大小是多少? 3x3的?如果是這樣,你會希望''矩陣的形狀(n,n,n,3,3)。 – pstjohn
@pstjohn:是的,它在每個點上是3個交叉3矩陣。我會嘗試你的解決方案,並回來。 –