【发布时间】:2020-07-12 06:17:38
【问题描述】:
我在循环参数 R 时计算了 5x5 雅可比矩阵的特征值。
我得到了预期的实数和复数特征值,但都以复数形式给出。我遇到的问题是numpy.sort 按每个特征值的实部对这些值进行排序,这对某个点很有用,但是每个特征值的实部随着 R 的变化而增加/减少。
因此,我需要按虚部排序,以将每个特征值保留在输出数组的同一条目中。下图显示了我的意思。我得到 3 个实数特征值显示在数组中的位置 2、3 和 4,跳到位置 0,1 和 4。如何按虚部排序?我在下面添加了我的代码。 Eigenvalues switching column
import numpy.linalg as la
for a,b,c,d,e,f in zip(T_S, T_C, S_S, S_C, w, R):
eigvals = la.eigvals(np.array([[-f, e, 0, 0, b],
[-e, -f, 0, 0, -a],
[0, 0, -f, e, d],
[0, 0, -e, -d, -c],
[-1/(2*F), 0, D/(2*F), 0, -1/F]]))
eigvals = np.sort(eigvals)
print(np.round(eigvals, decimals = 3))
编辑:考虑到这一点,我认为排序不会对我有所帮助。感谢那些回答的人。
我希望在每次迭代时将纯实特征值保持在数组中的相同位置。排序正是使它改变位置的原因。
for i = 4.2 eigvals = [-0.33-4.16j -0.33+4.16j -0.33+0.j 0. -4.2j 0. +4.2j ]
for i = 4.3 eigvals = [-0.35+0.j -0.33-4.26j -0.33+4.26j 0. -4.3j 0. +4.3j ]
在 i = 4.2 的情况下,实根位于位置 2,但对于 i = 4.3,实部减小,因此 np.sort 将其移动到位置 0。
我不确定是否有简单的解决方法,但任何建议都会很棒。
【问题讨论】:
-
这能回答你的问题吗? Sort a list by multiple attributes?
-
我不确定我是否理解输入和所需的输出。您能否提供一个minimal reproducible example 来解释输入/输出/所需输出?
标签: python numpy sorting spyder complex-numbers