matlab如何进行排序?

2024-10-01 09:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

^{pr 1}$

After 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):

^{pr2}$

我得到了:

[ 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


Tags: 代码排序defnp原因数组prsort
1条回答
网友
1楼 · 发布于 2024-10-01 09:24:03

来自SORT的MATLAB文档:

If A has complex entries r and s, sort orders them according to the following rule: r appears before s in sort(A) if either of the following hold:

  • abs(r) < abs(s)
  • abs(r) = abs(s) and angle(r) < angle(s)

换言之,具有复杂项的数组首先基于这些项的absolute value(即复数幅度)排序,并且任何具有相同绝对值的项都基于它们的phase angles排序。在

Python(即numpy)的顺序不同。从the documentation Amro linked to in his comment

The sort order for complex numbers is lexicographic. If both the real and imaginary parts are non-nan then the order is determined by the real parts except when they are equal, in which case the order is determined by the imaginary parts.

换言之,具有复杂条目的数组首先根据条目的实分量进行排序,而具有相等实分量的任何条目都将基于它们的虚分量进行排序。在

编辑:

如果要在MATLAB中重现numpy行为,一种方法是使用函数SORTROWS根据数组项的real和{a7}组件创建排序索引,然后将该排序索引应用于复杂值数组:

>> r = roots(q);  %# Compute your roots
>> [junk,index] = sortrows([real(r) imag(r)],[1 2]);  %# Sort based on real,
                                                      %#   then imaginary parts
>> r = r(index)  %# Apply the sort index to r

r =

   0.2694 - 0.3547i
   0.2694 + 0.3547i
   0.3369 - 0.1564i
   0.3369 + 0.1564i
   0.3528          
   1.3579 - 1.7879i
   1.3579 + 1.7879i
   2.4419 - 1.1332i
   2.4419 + 1.1332i
   2.8344          

相关问题 更多 >