如何根据另一个3D矩阵中的索引来置换3D矩阵中的每个堆栈?

时间:2012-04-24 22:13:43

标签: matlab matrix permutation octave

好吧,假设我有一个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],则A (i,j,:)将变为[3.5 2.5 1.5]

是的,我知道A(i,j,:)不是Octave的矢量。考虑permute(A, [1 3 2])(i,:,j)的简写。

这应该很简单,但无论出于何种原因,我似乎找不到这样做的功能。

1 个答案:

答案 0 :(得分:1)

它很简单:

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

在Matlab中,您可以使用索引向量重新排列任何向量:

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

A现在是[60 50 40 10 20 30]

如果AMxNxP,则当您使用A(i,j,:)表示法时,您实际上是在处理可以随意操作的Px1向量。