2012-04-24 5 views
0

さて、私は3D行列Aと別の3D行列Indsを持っているとします。私がしたいのは、各スタックA(i,j,:)に対して、Inds(i,j,:)で与えられたインデックスに従ってそのスタックを置換することです。したがって、A(i,j,:)[1.5 2.5 3.5]であり、Inds(i,j,:)[3 2 1]である場合、(i,j,:)[3.5 2.5 1.5]になります。別の3Dマトリックスのインデックスに従って、3Dマトリックス内の各スタックをどのように並べ替えますか?

はい、私はA(i,j,:)がOctaveのベクターではありません。それはpermute(A, [1 3 2])(i,:,j)の略語だと考えてください。

これは単純なはずですが、何らかの理由で私はそれを行う機能が見つからないようです。

答えて

1

それはその非常に簡単にMathWorks社のMATLAB:MATLABで

A(i,j,:) = A(i,j,Inds(i,j,:)); 

をあなたはインデックスのベクトルを使用して、任意のベクトルを並べ替えることができます:AMxNxPある場合

A = [10 20 30 40 50 60]; 
B = [6 5 4 1 2 3]; 
A = A(B); 

Aは、今[60 50 40 10 20 30]

ですA(i,j,:)という表記法を使用する場合、本質的にはPx1あなたが自由に操作できるベクトルです。

+0

これが当てはまる場合、ネストされたループを使用してiとjを反復する以外は選択肢がないようです。より良い方法がないかぎり? –

関連する問題