來自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