我有两个相同长度的向量a
和b
,每个向量都有一些随机顺序。我希望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]
显然不对。
有什么建议吗?
答案 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