2017-06-20 45 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