每个网格点的矩阵特征值
Eigen values for matrix at each grid point
我有一个 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交5矩阵。
为了扩展我的评论并提供一些实际代码,您可以通过一些数组重塑使其与现有矩阵一起使用:
eigs = np.linalg.eigvals(s.swapaxes(0, -1).swapaxes(1,-2))
e = eigs.swapaxes(0,-1)
会给你一个矩阵
>>> e.shape()
(3, 256, 256, 256)
我有一个 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交5矩阵。
为了扩展我的评论并提供一些实际代码,您可以通过一些数组重塑使其与现有矩阵一起使用:
eigs = np.linalg.eigvals(s.swapaxes(0, -1).swapaxes(1,-2))
e = eigs.swapaxes(0,-1)
会给你一个矩阵
>>> e.shape()
(3, 256, 256, 256)