我想在特殊尺寸内改组数组,而不使用C command。例如。我想在第三维中对数组val
进行混洗:
输入:
val(:,:,1) =
35 30 9
3 4 28
31 1 5
8 32 36
val(:,:,2) =
6 34 22
7 29 17
2 26 12
33 21 13
val(:,:,3) =
19 14 20
23 18 15
27 24 16
10 25 11
输出:
val(:,:,1) =
19 30 20
3 4 15
31 26 12
10 32 36
val(:,:,2) =
6 34 22
7 18 17
27 1 5
8 25 13
val(:,:,3) =
35 14 9
23 29 28
2 24 16
33 21 11
我该怎么做?
请注意,存在a similar question here in stack overflow,但请注意示例有所不同。如果我在那里执行offred的解决方案,我会得到这种不良的洗牌:
val(:,:,1) =
8 32 36
3 4 28
31 1 5
35 30 9
val(:,:,2) =
33 21 13
7 29 17
2 26 12
6 34 22
val(:,:,3) =
10 25 11
23 18 15
27 24 16
19 14 20
谢谢!
我会做这样的事情:
S.X = 1:size(val,1);
S.Y = 1:size(val,2);
A = arrayfun(@(b) arrayfun(@(a) val(a,b,randperm(size(val,3))),S.X,'UniformOutput',false), S.Y, 'UniformOutput', false);
cell2mat(vertcat(A{:})')
给出类似的内容:
ans(:,:,1) =
19 14 22
3 18 15
31 26 12
33 21 11
ans(:,:,2) =
6 34 9
23 4 17
2 24 5
10 25 13
ans(:,:,3) =
35 30 20
7 29 28
27 1 16
8 32 36