来自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排序。在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