У меня есть 3D-матрица (10000 x 60 x 20), и мне нужно переставить 2-е и 3-е измерения, сохранив столбцы без изменений.
Для 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
Могу я сделать это более эффективно? Есть ли лучшие способы?