我有一个带有复杂条目的向量x
,我想要执行以下操作:
我们假设有一些具有相同绝对值的条目,例如13
,5+12i
和5-12i
。如果我将它们放入内置sort
函数中,则会先放置13
,然后放置5-12i
,然后放置5+12i
。但是,由于所有这些都具有相同的幅度,我想按它们的虚部对它们进行排序,所以我希望5-12i
先来,然后是13
然后是5+12i
。在不使用任何循环或if语句的情况下,最简单的方法是什么?
答案 0 :(得分:4)
您可以构造一个矩阵,其大小为第一列,虚构组件为第二列,然后使用sortrows
对结果进行排序,该结果首先按第一列(大小)排序,然后通过第二列(虚构组件)。您可以使用markdown_code_blocks.highlight(markdown_s)
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