如何使用第一维索引列表及其相应的第二维索引切割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
我相信这是一个单线/优雅的解决方案。
答案 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)))