每个网格点的矩阵特征值

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)