matlab中矩阵中向量的排列

permutations of vectors in matrix in matlab

我有一个来自文件的静态矩阵:

    size(data)=[80 5]

我想要的是随机改变每个向量的位置 当我使用像这样的烫发时:

    N = size(data, 1);
    X = perms(1:N);                    % # Permutations of column indices
    Y = meshgrid(1:N, 1:factorial(N)); % # Row indices
    idx = (X - 1) * N + Y;             % # Convert to linear indexing
    C = data(idx) 

但是它给我一个错误:Maximum variable size allowed by the program is exceeded. 还有其他功能可以满足我的需求吗?

perms 不适合大数字,即任何 >10

的数字

参考Documentation

它说

perms(v) is practical when length(v) is less than about 10.

从以下代码中查看它占用的大小:

MB(10,1) = 0;
for N = 1:10
    X = perms(1:N);
    dt=whos('X');
    MB(N)=dt.bytes*9.53674e-7;
end

plot(1:10,MB,'r*-');

请注意曲线的陡度突然上升超过 9。

所以我想我已经完成了

 N = size(data, 1);
 r=randperm(N);
 for ii=1:80
   matrix(r(ii),:) =data(ii,:)  ;     
 end