MATLAB:使用sub2ind 3d从给定行和列索引的3d矩阵中提取值

日月光

我有A包含我的数据的3D矩阵在矩阵表示的行和列索引定义的多个位置,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矩阵?

路易斯·门多

可以使用线性索引隐式扩展将其向量化

out = A( row_col_idx(:,1) + ...
        (row_col_idx(:,2)-1)*size(A,1) + ...
        (0:size(A,1)*size(A,2):numel(A)-1) ).';

上面构建了一个与输出一样大的索引矩阵。如果由于内存限制而不可接受,可以通过重塑来避免A

sz = size(A); % store size A
A = reshape(A, [], sz(3)); % collapse first two dimensions
out = A(row_col_idx(:,1) + (row_col_idx(:,2)-1)*sz(1),:).'; % linear indexing along
% first two dims of A
A = reshape(A, sz); % reshape back A, if needed

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MATLAB:使用sub2ind 3d从给定行和列索引的3d矩阵中提取值

来自分类Dev

从3D单元阵列中提取数据到2D矩阵-MATLAB

来自分类Dev

使用矩阵中的行和列索引从矩阵中提取值

来自分类Dev

从 3D numpy 数组中提取 2D

来自分类Dev

theano〜使用索引矩阵和嵌入矩阵来生成3D张量?

来自分类Dev

将sub2Ind Matlab转换为C ++ / OpenCV

来自分类Dev

将sub2Ind Matlab转换为C ++ / OpenCV

来自分类Dev

如何将2D数据帧转换为3D矩阵,并保留行和列顺序

来自分类Dev

从2D矩阵中基于3D矩阵的位置获取值

来自分类Dev

3D矩阵到2D矩阵Matlab

来自分类Dev

OpenCV / C ++中的MATLAB sub2ind / ind2sub

来自分类Dev

MATLAB Sum 沿 3D 矩阵中的某些列

来自分类Dev

在Matlab中从3D矩阵绘图

来自分类Dev

用于3D矩阵的Matlab Accumarray

来自分类Dev

在Matlab中创建3D矩阵

来自分类Dev

如何从FiPy(3D到2D)中的3D变量中提取平面

来自分类Dev

如何从FiPy(3D到2D)中的3D变量中提取平面

来自分类Dev

在MATLAB中对3D数组进行排序和索引

来自分类Dev

使用参考的C ++ 3D矩阵

来自分类Dev

Matlab索引3D数组

来自分类Dev

对于给定的条件,获取 2D 张量 A 中值的索引,使用这些索引来索引 3D 张量 B

来自分类Dev

从2D矩阵动态填充3D矩阵

来自分类Dev

将3D矩阵与2D矩阵相乘

来自分类Dev

Python:从3D数组中提取2D数组

来自分类Dev

使用Matlab对3D矩阵左右翻转的向量化

来自分类Dev

使用整形的平均3d矩阵matlab

来自分类Dev

为什么在使用等值面vs plot3和ind2sub时更改3D图像的方向?

来自分类Dev

Matlab提取3D矩阵对角线的有效方法

来自分类Dev

如何在MATLAB中从3D点云中提取xyz坐标

Related 相关文章

热门标签

归档