在Matlab中找到具有相同大小的条目并按虚数部分对其排序

在Matlab中找到具有相同大小的条目并按虚数部分对其排序,matlab,Matlab,我有一个向量x,包含复杂的条目,我想执行以下操作: 假设存在具有相同绝对值的条目,例如13、5+12i和5-12i。如果我将它们放入内置的sort函数中,它将首先放入13,然后放入5-12i,然后放入5+12i。然而,由于所有这些都有相同的大小,我想按它们的虚部对它们进行排序,所以我希望先来5-12i,然后是13,然后是5+12i。在不使用任何循环或if语句的情况下,最简单的方法是什么?您可以构造一个矩阵,将幅值作为第一列,将虚部作为第二列,然后使用该矩阵对结果进行排序,结果将首先按第一列(幅值

我有一个向量
x
,包含复杂的条目,我想执行以下操作:


假设存在具有相同绝对值的条目,例如
13
5+12i
5-12i
。如果我将它们放入内置的
sort
函数中,它将首先放入
13
,然后放入
5-12i
,然后放入
5+12i
。然而,由于所有这些都有相同的大小,我想按它们的虚部对它们进行排序,所以我希望先来
5-12i
,然后是
13
,然后是
5+12i
。在不使用任何循环或if语句的情况下,最简单的方法是什么?

您可以构造一个矩阵,将幅值作为第一列,将虚部作为第二列,然后使用该矩阵对结果进行排序,结果将首先按第一列(幅值)排序,然后按第二列排序(虚部)。您可以使用
sortrows
获取排序行的相应索引,然后使用这些索引对原始数据进行排序

data = [13, 5+12i, 5-12i];

[~, inds] = sortrows([abs(data(:)), imag(data(:))]);
sorted = data(inds);
%   5.0000 - 12.000i    13.0000 + 0.0000i   5.0000 +12.0000i

您可以构造一个矩阵,将幅值作为第一列,将虚部作为第二列,然后使用对结果进行排序,该结果将首先按第一列(幅值)排序,然后按第二列(虚部)排序。您可以使用
sortrows
获取排序行的相应索引,然后使用这些索引对原始数据进行排序

data = [13, 5+12i, 5-12i];

[~, inds] = sortrows([abs(data(:)), imag(data(:))]);
sorted = data(inds);
%   5.0000 - 12.000i    13.0000 + 0.0000i   5.0000 +12.0000i