我有一个x列的单元格数组,每个列都有一个yx1单元格。我想随机排列"行"在列内。也就是说,对于具有元素a_1,a_2,... a_y的每个yx1单元格,我想将相同的置换应用于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;
但是你可以看到它有点难看。有更自然的方法吗?
我意识到我可能使用了错误的数据类型,但由于遗留原因,我希望避免切换。但是,如果答案是"切换"那我觉得这就是答案。
答案 0 :(得分:3)
我假设您有一个列向量的单元格数组,例如
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