Из документации MATLAB для SORT :
Если A
имеет сложные записи r
и s
,
sort
заказывает их согласно
следующее правило: r
появляется перед s
в
sort(A)
если одно из следующих
держать:
abs(r) < abs(s)
abs(r) = abs(s)
и angle(r) < angle(s)
Другими словами, массив, имеющий сложные записи, сначала сортируется на основе абсолютного значения (т.е. комплексной величины) этих записей, а любые записи, имеющие одинаковое абсолютное значение, сортируются на основе их фазовые углы .
Python (то есть numpy) упорядочивает вещи по-разному. С документация, на которую ссылается Амро в своем комментарии :
Порядок сортировки комплексных чисел
лексикографический. Если и реальный, и
мнимые части не являются нан, то
порядок определяется реальными частями
кроме случаев, когда они равны, в которых
В случае, если порядок определяется
мнимые части.
Другими словами, массив, имеющий сложные записи, сначала сортируется на основе реального компонента записей, а любые записи, имеющие равные реальные компоненты, сортируются на основе их мнимых компонентов.
EDIT:
Если вы хотите воспроизвести непостоянное поведение в MATLAB, вы можете использовать функцию SORTROWS для создания индекса сортировки на основе real и мнимые компоненты записей массива, затем примените индекс сортировки к массиву комплексных значений:
>> 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