Python 求多一维阵列特征值的最快方法

Python 求多一维阵列特征值的最快方法,python,numpy,vectorization,eigenvalue,abaqus,Python,Numpy,Vectorization,Eigenvalue,Abaqus,我有一个(n,m,6)-数组,其中n和m大于10.000。这6个值来自对称矩阵,顺序如下: [11,12,13],[12,22,23],[13,23,33]=>(11,22,33,12,23,31) 我想计算每个矩阵的特征值和特征向量。现在它是用2个for循环来实现的,循环迭代每个维度,将值重新排序为矩阵形式并计算特征值。但我想知道是否有一个更快的解决方案使用矢量化?我发现的最好的方法是使用(6,3,3)变换矩阵将对称值转换为适当的对称张量 transf = np.array([[[1.,0.,

我有一个(n,m,6)-数组,其中n和m大于10.000。这6个值来自对称矩阵,顺序如下:

[11,12,13],[12,22,23],[13,23,33]=>(11,22,33,12,23,31)


我想计算每个矩阵的特征值和特征向量。现在它是用2个for循环来实现的,循环迭代每个维度,将值重新排序为矩阵形式并计算特征值。但我想知道是否有一个更快的解决方案使用矢量化?

我发现的最好的方法是使用
(6,3,3)
变换矩阵将对称值转换为适当的对称张量

transf = np.array([[[1.,0.,0.],[0.,0.,0.],[0.,0.,0.]],                #11
                   [[0.,0.,0.],[0.,1.,0.],[0.,0.,0.]],                #22
                   [[0.,0.,0.],[0.,0.,0.],[0.,0.,1.]],                #33
                   [[0.,1.,0.],[1.,0.,0.],[0.,0.,0.]],                #12 & 21
                   [[0.,0.,1.],[0.,0.,0.],[1.,0.,0.]],                #13 & 31
                   [[0.,0.,0.],[0.,0.,1.],[0.,1.,0.]]]).swapaxes(0,1) #23 & 32

e, v = np.linalg.eigh(input.dot(transf))

非编程说明:请注意
abaqus
是输出实际应力/应变还是工程应力/应变,因为生成的变换是不同的(如果我正确地记住了“实际应变”,则需要非对角项为
0.5
,而不是
1.

后处理
abaqus
输出是吗?是的,这就是结果的存储方式…添加了
abaqus
标记,因为我认为这是一个非常常见的问题。Sry,我花了一些时间对其进行了测试,但现在我做到了,它运行非常好,比我的循环解决方案快得多。非常感谢你。我还要感谢你的建议。我已经有问题,但得到了修复!