2017-09-23 150 views
0

我有2個數組(向量?在m白話?),我想對它們進行一致排序。我如何在Matlab中實現這一點?根據1個矢量排序2個陣列/矢量

例如;我從直方圖中找到了峯值,並將它們存儲在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

使用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

您可以安排兩個向量作爲矩陣的列和原子,在字典順序是矩陣的行進行排序。然後結果是排序矩陣的列:

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