基于1个向量对2个数组/向量进行排序

时间:2017-09-23 23:10:56

标签: matlab

我有2个数组(向量?在m白话?)我想要一致排序它们。我怎样才能在Matlab中实现这一目标?

例如;我从直方图中找到了峰值,它们存储在2个数组中; peakXValspeakYVals。它们将始终以x轴上升指数排列。所以他们总是看起来像:

peakXVals = [0, 3, 20, 77, 240];
peakYVals = [10, 999, 30, 40, 20];

我希望根据peakYVals中的值按降序对两个数组进行排序。即从最大峰值到最小峰值。所以期望的结果是:

peakXVals = [3, 77, 20, 240, 0];
peakYVals = [999, 40, 30, 20, 10];

我可以用什么函数在Matlab中实现这个功能?

2 个答案:

答案 0 :(得分:2)

使用sort

peakXVals = [0, 3, 20, 77, 240];
peakYVals = [10, 999, 30, 40, 20];

>> [B,I] = sort(peakYVals, 'descend')

B =

   999    40    30    20    10


I =

     2     4     3     5     1

然后:

>> peakXVals_sorted = peakXVals(I)

peakXVals_sorted =

     3    77    20   240     0

>> peakYVals_sorted = B

peakYVals_sorted =

   999    40    30    20    10

答案 1 :(得分:1)

您可以将两个向量排列为矩阵的列,并按字典顺序将该矩阵的行排序为原子。然后结果是排序矩阵的列:

tmp = sortrows([peakYVals(:) peakXVals(:)], 'descend');
peakYVals = tmp(:,1).';
peakXVals = tmp(:,2).';