我有一个3D矩阵(10000 x 60 x 20),我需要交换第二维和第三维,同时保持列不变。
对于2D矩阵,我使用RANDPERM:
pidx = randperm(size(A,2));
Aperm = A(:,pidx);
我不能只是简单地两次使用RANDPERM——先是列索引,然后是页面索引。这样随机性不够。
一种解决方案是将矩阵从3D重塑为2D,将列和页面压缩为列,对它们进行排列,然后再次重塑。但我还想以这样的方式进行排列,即为每个页面单独排列列。类似于:
Aperm = zeros(size(A));
for p=1:size(A,3)
pidx = randperm(size(A,2));
Aperm(:,:,p) = A(:,pidx,p);
end
我能更有效地完成吗?有更好的方法吗?
A(i,:,:)
都需要以相同的方式进行排列。这就是我所说的“保持列不变”的意思。A(i,randperm(size(A,2)),randperm(size(A,3))
并不能给我足够的排列。它基本上是在列索引内部对页面索引进行排列。 - yukA(i,randperm(size(A,2)),randperm(size(A,3))
。所有的列和页都以相同的方式排列。为了更好地理解我的观点,请尝试x = reshape(1:24,4,6); x(randperm(4),randperm(6))
。 - yuk