2012-04-24 47 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],则A (i,j,:)变成[3.5 2.5 1.5]如何根据另一个3D矩阵中的索引对3D矩阵中的每个堆栈进行置换?

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

这应该很简单,但无论出于何种原因,我似乎无法找到实现它的功能。

回答

1

它matlab的它相当简单:

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矢量,你可以随意操纵。

+0

如果是这种情况,那么似乎除了使用嵌套循环遍历i和j之外别无选择。除非有更好的方法? – 2012-04-24 22:38:31