【发布时间】:2020-11-15 10:01:55
【问题描述】:
我有 3d 矩阵 A,其中包含我的数据。在由矩阵row_col_idx 所示的行和列索引定义的多个位置处,我想提取沿第三维的所有数据,如下所示:
A = cat(3,[1:3;4:6], [7:9;10:12],[13:15;16:18],[19:21;22:24]) %matrix(2,3,4)
row_col_idx=[1 1;1 2; 2 3];
idx = sub2ind(size(A(:,:,1)), row_col_idx(:,1),row_col_idx(:,2));
out=nan(size(A,3),size(row_col_idx,1));
for k=1:size(A,3)
temp=A(:,:,k);
out(k,:)=temp(idx);
end
out
这段代码的输出如下:
A(:,:,1) =
1 2 3
4 5 6
A(:,:,2) =
7 8 9
10 11 12
A(:,:,3) =
13 14 15
16 17 18
A(:,:,4) =
19 20 21
22 23 24
out =
1 2 6
7 8 12
13 14 18
19 20 24
输出符合预期。然而,实际的A 和 row_col_idx 非常庞大,因此这段代码的计算成本很高。是否可以验证此代码以避免循环和temp 矩阵?
【问题讨论】:
标签: arrays matlab vectorization