在MATLAB中使用第一维索引列表及其相应的第二维索引切片3D矩阵?

时间:2017-02-17 03:31:23

标签: matlab

如何使用第一维索引列表及其相应的第二维索引切割3D矩阵?

例如,给定

>> A = cat(3, [1 2 3; 4 5 6; 7 8 9], [10 20 30; 40 50 60; 70 80 90], [100 200 300; 400 500 600; 700 800 900])

A(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


A(:,:,2) =

    10    20    30
    40    50    60
    70    80    90


A(:,:,3) =

   100   200   300
   400   500   600
   700   800   900

我想切出A(2, 3, :)A(1, 2, :)来获取[6 60 600; 2 20 200]

我失败了

>> A([2, 1], [3, 2], :)

ans(:,:,1) =

     6     5
     3     2


ans(:,:,2) =

    60    50
    30    20


ans(:,:,3) =

   600   500
   300   200

我相信这是一个单线/优雅的解决方案。

1 个答案:

答案 0 :(得分:3)

要提取所需的元素,下标应转换为索引(sub2ind),但在此之前应该应用3D转置(permute),以便第三个维度成为第一个维度。

idx = [2 3; 1 2];
[m n z]= size(A);
B=permute(A,[3 1 2]);
result = B(:,sub2ind([m,n],idx(:,1),idx(:,2)))