matlab怎么做呢?

时间:2010-09-07 19:56:46

标签: python matlab numpy

sort()如何在matlab中工作?
纯matlab中的代码:
q是一个数组:

q = -0.2461    2.9531  -15.8867   49.8750  -99.1172  125.8438  -99.1172   
49.8750  -15.8867    2.9531   -0.2461

q = -0.2461 2.9531 -15.8867 49.8750 -99.1172 125.8438 -99.1172 49.8750 -15.8867 2.9531 -0.2461 之后,我得到了:
q = sort(roots(q))

q = 0.3525 0.3371 - 0.1564i 0.3371 + 0.1564i 0.2694 - 0.3547i 0.2694 + 0.3547i 1.3579 - 1.7880i 1.3579 + 1.7880i 2.4410 - 1.1324i 2.4410 + 1.1324i 2.8365

好吧,似乎工作正常!然后在python中,我使用(q与上面相同,它是): np.array

import numpy as np
q = np.sort(np.roots(q))

我得到了: import numpy as np q = np.sort(np.roots(q))

嗯......这两个结果看起来有所不同,因为它们排序不同,所以原因是什么?我做错了什么?提前谢谢你!

我的回答:

[ 0.26937874-0.35469815j  0.26937874+0.35469815j  0.33711562-0.15638427j
 0.33711562+0.15638427j  0.35254298+0.j          1.35792218-1.78801226j
 1.35792218+1.78801226j  2.44104520-1.13237431j  2.44104520+1.13237431j
 2.83653354+0.j        ]

[ 0.26937874-0.35469815j 0.26937874+0.35469815j 0.33711562-0.15638427j 0.33711562+0.15638427j 0.35254298+0.j 1.35792218-1.78801226j 1.35792218+1.78801226j 2.44104520-1.13237431j 2.44104520+1.13237431j 2.83653354+0.j ]

然后在python代码中调用它,工作正常:p

1 个答案:

答案 0 :(得分:4)

来自SORT的MATLAB文档:

  

如果A包含复杂条目rs,   根据{{​​1}}命令他们   以下规则:sort出现在r之前   s如果是以下任何一种情况   持有:

     
      
  • sort(A)
  •   
  • abs(r) < abs(s)abs(r) = abs(s)
  •   

换句话说,具有复杂条目的数组首先根据这些条目的absolute value(即复杂幅度)进行排序,并且具有相同绝对值的任何条目都将根据它们的{{3 }}

Python(即numpy)以不同的方式命令。来自phase angles

  

复数的排序顺序是   字典。如果真实和   假想部分是非纳米然后是   订单由实际部分决定   除非他们是平等的,其中   情况下,订单由   想象中的部分。

换句话说,具有复杂条目的数组首先根据条目的实际组件进行排序,并且具有相同实际组件的任何条目都将根据其虚构组件进行排序。

修改

如果要在MATLAB中重现numpy行为,可以使用函数the documentation Amro linked to in his comment创建基于SORTROWSreal组件的排序索引的一种方法的数组条目,然后将该排序索引应用于您的复杂值数组:

angle(r) < angle(s)