2017-06-20 75 views
0

我有一個序列r,我需要根據置換k以獲得序列rearanging的r的組件:如何根據排列重新排列序列的組成部分?

y = [y0 y1 y2 y3 y4 y5 y6 y7]

abs(y0) > abs(y1) > abs(y2) > abs(y3) > abs(y4)abs(y5) > abs(y6) > abs(y7)

實施例:

r = [-2.3 2.1 2.0 -1.4 1.2 0.5 -0.02]k = [1 2 3 5 4 6 7]

所以

y = [-2.3 2.1 2.0 1.2 -1.4 0.5 -0.02] 

我用這個命令,但我找不到序列搜索:

[~,k] = sort(abs(r),'descend'); 
y = r(k); 
+1

得到的結果是什麼錯?問題是沒有獨特的解決方案,因爲abs(y4)> abs(y5)'不應該是真的。你的代碼返回'y = -2.3000 2.1000 2.0000 -1.4000 1.2000 0.5000 -0.0200',它滿足你的條件。 – m7913d

+0

在我的代碼中,k是自動創建的,而我已經有'k = [1 2 3 5 4 6 7]'。我的代碼給出了'k = [1 2 3 4 5 6 7]'。 – m2016b

+0

那麼,只需使用'y = r(k);'給定'k'而不用重新計算它? – m7913d

回答

0

顯然,這只是在新MATLAB的版本有效,但如果你有一個(不知道當它被引入,但肯定在2014b以上),這將起作用:

y=sort(r,'direction','descend','ComparisonMethod','abs') 
+0

我使用matlab 2016.Thanks我有解決方案。 – m2016b