如何巧妙地从3D阵列中提取元素并将其放入一个数组中?

时间:2015-09-15 13:46:32

标签: matlab multidimensional-array

让我们说

g(:,:,1) = [ 1;   4;  7]
g(:,:,2) = [11;  44; 77]  
g(:,:,3) = [111; 444; 777] .

让我们说a = [2; 3; 1]b = [1; 3; 2]。我希望输出像这样 [4;777;11]。第一个元素是g(2,:,1),第二个元素是g(3,:,3),第三个元素是g(1,:,2)

1 个答案:

答案 0 :(得分:2)

这很简单 -

[m,n,r] = size(g)
out = g(a + (b-1)*m*n)

对于一般情况,当您还要指定列号时 -

out = g(a + (col_num-1)*m + (b-1)*m*n)

对于更通用的情况,当您想要指定的不仅仅是一列时 -

g(bsxfun(@plus,(col_nums-1)*m,a(:)+(b(:)-1)*m*n))

对于更通用的案例,您必须提出更难的问题。

示例运行 -

>> g
g(:,:,1) =
    11    81    26    19    87
    96    87    80    27    58
     1     9    43    15    55
    77    40    91    14    15
g(:,:,2) =
    85    40    19    90    34
    62     8    24    94    90
    35    24    42    49    37
    51    13     5    49    12
g(:,:,3) =
    78    10    57    82    65
    39    14     6     2    73
    24    94    24     5    65
    40    95    35    17    45
>> [m,n,r] = size(g);
>> a = [2,3,1]; b = [1,3,2];
>> col_nums = [1 3];
>> g(bsxfun(@plus,(col_nums-1)*m,a(:)+(b(:)-1)*m*n))
ans =
    96    80
    24    24
    85    19