如何在多维数组中的特定维度内随机播放

问题描述 投票:1回答:1

我想在特殊尺寸内改组数组,而不使用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

谢谢!

matlab shuffle
1个回答
0
投票

我会做这样的事情:

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
© www.soinside.com 2019 - 2024. All rights reserved.