Как случайным образом переставлять столбцы в трехмерной матрице в MATLAB

У меня есть 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

Могу я сделать это более эффективно? Есть ли лучшие способы?

6
задан gnovice 22 May 2017 в 03:56
поделиться