给数组提供与MATLAB中另一个数组相同的顺序

时间:2015-03-06 17:59:56

标签: arrays matlab

我有两个相同长度的向量ab,每个向量都有一些随机顺序。我希望a具有相同的顺序,并且b根据a进行排序。

例如:

a = [5 4 1 2]
b = [7 8 9 6]

现在我希望b的最高值位于a的最高值位置,b的第二高值位于第二个位置a等的最高值;那就是:

b = [9 8 6 7]

我试过了

[~, indices] = sort(a)
b(indices)

但这会产生

ans = [9 6 8 7]

显然不对。

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

你几乎是对的。您需要对两个结果进行排序,并使用indices索引到已排序向量b。您还希望使用'descend'标志将值从最高到最低排序。

这样做:

a = [5 4 1 2];
b = [7 8 9 6];

[~,indices] = sort(a,'descend');
bsort = sort(b,'descend');
bsort(indices)
在这种情况下,

indices将为您提供a中每个值按降序显示的排序形式的位置。如果您想调整b的值以使其符合与a相同的顺序,则还需要按降序对b进行排序,以便值排列,然后使用indices索引到b的排序版本以完成任务。

我们得到:

ans =

 9     8     6     7

答案 1 :(得分:3)

您的变量'指数'没有准确存储您的预期。修改查找功能的帮助。这个稍微不同的代码可能是你的答案:

a = [5 4 1 2];
b = [7 8 9 6];

[~, idx] = sort(a);
b(idx) = sort(b)

答案 2 :(得分:2)

毕竟,事实证明你可以使用ascend选项,虽然方式有点不同:

a=[5 5 6 3];
b=[1 2 3 4];
[asorted,indices] = sort(a,'ascend');
bsorted = sort(b,'ascend');
output(indices) = bsorted

产生:

output =

     2     3     4     1