我有 1 -by- 4 单元格数组D
。每个单元元素包含 2 -by- 2 双矩阵。我想独立地对每个矩阵进行随机置换,结果我将具有与D
相同大小的单元阵列,但其矩阵'元素将被置换,然后是反转,以便再次获得原始D
。
对于单个矩阵的情况我有代码,它的工作原理如下:
A=rand(3,3)
p=randperm(numel(A));
A(:)=A(p)
[p1,ind]=sort(p);
A(:)=A(ind)
但它对单元格数组不起作用。
答案 0 :(得分:1)
最简单的解决方案是使用循环:
getFragmentManager()
假设您的nd = numel(D);
D_permuted{1,nd} = [];
D_ind{1,nd} = [];
for d = 1:nd)
A=D{d};
p=randperm(numel(A));
A(:)=A(p)
[~,ind]=sort(p);
D_permuted{d} = A;
D_ind{d} = ind;
end
矩阵只是一个相同大小的列表(例如 2 -by - 2 )矩阵,那么您可以通过使用来避免循环一个3D双矩阵而不是单元阵列。
例如,如果您喜欢这样的D
:
D
然后你就可以像这样进行排列
n = 5;
D = repmat([1,3;2,4],1,1,n)*10 %// Example data