2017-06-20 9 views
0

Iが配列rを有し、iはシーケンスを取得するために順列kに従ってrの成分をrearangingする必要があります順列に従って配列の成分を並べ替える方法は?

abs(y0) > abs(y1) > abs(y2) > abs(y3) > abs(y4)

y = [y0 y1 y2 y3 y4 y5 y6 y7]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 = [1 2 3 5 4 6 7]'を持っている間に自動的にkが作成されます。私のコードは 'k = [1 2 3 4 5 6 7]'を与えます。 – m2016b

+0

だから、 'y = r(k);'を 'k'で再計算せずに使うだけですか? – m7913d

答えて

0

どうやらこれは新しいMATLABのバージョンでのみ有効ですが、あなたは1を持っている場合(わからないとき導入されましたが、確かに2014b以上)これは動作します:

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

私はmatlab 2016を使用しています。私は解決策を持っています。 – m2016b

関連する問題