matlab中矩阵中向量的排列

时间:2015-04-26 09:04:50

标签: matlab matrix permutation

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

    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. 还有其他功能可以提供我需要的东西吗?

2 个答案:

答案 0 :(得分:0)

perms对大数字不好,即任何数字> 10

参考Documentation

它说

  当长度(v)小于约10时,

烫发(v)是实用的。

从以下代码中查看所需的大小:

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。

enter image description here

答案 1 :(得分:0)

所以我认为我已经完成了

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