在Matlab中,sort()函数的工作原理是将数组按升序排序。以下是纯Matlab代码示例:
假设q是一个数组:
经过
我得到的是:
然后在Python代码中调用它,就可以正常工作:p
假设q是一个数组:
sorted_q = sort(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 = 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))
我得到的是:
[ 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 ]
嗯...这两个结果排序方式似乎不同,那么是什么原因呢?我做错了什么吗?提前谢谢!
我的回答:
def sortComplex(complexList):
complexList.sort(key=abs)
# then sort by the angles, swap those in descending orders
return complexList
然后在Python代码中调用它,就可以正常工作:p
roots(q)[ abs(roots(q)).argsort() ]
- Amro