Matlab 如何洗牌单元格数组中的行

Matlab 如何洗牌单元格数组中的行,matlab,Matlab,我有一个x列的单元格数组,每个列都有一个yx1单元格。我想将列中的“行”随机化。也就是说,对于包含元素a_1、a_2、。。。我想对a_I的指数应用相同的排列 我有一个函数可以这样做 function[Oarray] = shuffleCellArray(Iarray); len = length(Iarray{1}); width = length(Iarray); perm = randperm(len); Oarray=cell(width, 0);

我有一个x列的单元格数组,每个列都有一个yx1单元格。我想将列中的“行”随机化。也就是说,对于包含元素a_1、a_2、。。。我想对a_I的指数应用相同的排列

我有一个函数可以这样做

function[Oarray] = shuffleCellArray(Iarray);

    len   = length(Iarray{1});
    width = length(Iarray);
    perm  = randperm(len);

    Oarray=cell(width, 0);

    for i=1:width;
        for j=1:len;
            Oarray{i}{j}=Iarray{i}{perm(j)};
        end;
    end;
但正如你所看到的,这有点难看。有没有更自然的方法


我意识到我可能使用了错误的数据类型,但出于遗留原因,我希望避免切换。但是,如果答案是“switch”,那么我想这就是答案。

我假设您有一个列向量的单元格数组,例如

Iarray = {(1:5).' (10:10:50).' (100:100:500).'};
在这种情况下,您可以这样做:

ind = randperm(numel(Iarray{1})); %// random permutation
Oarray = cellfun(@(x) x(ind), Iarray, 'UniformOutput', 0); %// apply that permutation
                                                           %//  to each "column"
或转换为中间矩阵,然后再转换回单元阵列:

ind = randperm(numel(Iarray{1})); %// random permutation
x = cat(2,Iarray{:}); %// convert to matrix
Oarray = mat2cell(x(ind,:), size(x,1), ones(1,size(x,2))); %// apply permutation to rows
                                                           %// and convert back

很好!我真的应该学习更多关于matlab中可用的高阶编程的知识。这可能是一个好的开始