繁体   English   中英

获得许多1d数组的特征值的最快方法

[英]fastest way to get eigenvalues of many 1d array

我有一个(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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM