【问题标题】:Sorting of eigenvalues in Python in for-loop在for循环中对Python中的特征值进行排序
【发布时间】:2018-07-05 20:22:43
【问题描述】:

我正在计算并绘制一个 5x5 数组的特征值作为参数 x 的函数。我知道我必须对特征值进行排序,因为它们不一定是用 numpy 排序的,所以最简单的方法是使用 argsort() 并将它们从小到大排序(反之亦然):

    import matplotlib.pyplot as plt
    import numpy as np

    #matrix values
    A=20
    B=8
    C=10
    D = 10
    E=30
    q1 = 6
    q2=5

    xx = np.linspace(0,30,300) 


    ev1=np.array([])
    ev2=np.array([])
    ev3=np.array([])
    ev4=np.array([])
    ev5=np.array([])
    for x in np.arange(0,30, 0.1):
      vals, vecs = (np.linalg.eig([[A,0,x,0,0],[0,B,q1,0,0][x,q1,C,0,0][q2,0,q2,D,0],[0,0,0,0,E]]))
      idx = vals.argsort()[::-1]   
      vals = vals[idx]
      vecs = vecs[:,idx]
      ev1=np.append(ev1, vals[0])
      ev2=np.append(ev2, vals[1])
      ev3=np.append(ev3, vals[2])
      ev4=np.append(ev4, vals[3])
      ev5=np.append(ev5, vals[4])

      plt.figure(figsize=(7.5,4.5))
      plt.plot(xx, ev1)
      plt.plot(xx, ev2)
      plt.plot(xx, ev3)
      plt.plot(xx, ev4)
      plt.plot(xx, ev5)
      plt.savefig('eigenvalues.jpg')
      plt.show()

但是我对结果不是很满意(见附图),因为这并没有给出特征值的正确依赖性,例如蓝色的水平线最初切换为橙色,但我希望它保持蓝色,与红色曲线相似。但是,我不知道如何实现这一点。

提前感谢您的建议!

【问题讨论】:

  • 从您的问题来看,您似乎只是不知道如何设置曲线的颜色。这是真的吗?
  • 不,这只是为了可视化我的问题。我的问题更深,我正在寻找一种以连续方式对特征值和相关特征向量进行排序的方法。

标签: python sorting numpy matplotlib linear-algebra


【解决方案1】:

我相信您在这里过于复杂了您的问题。当您在特征值上使用 argsort 并附加时,您只是获取最高、第二高、最低值等的列表,而忽略了特征向量数据。如果您删除代码的整个 argsort 部分,绘图代码将正常工作,因为特征值在适当的位置链接到正确的特征向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2018-07-29
    相关资源
    最近更新 更多