matlab - 根据范围索引从矩阵中提取行?

标签 matlab matrix indexing vectorization

我有一个 NxM 大小的矩阵 A。我还有一个数组 B,其中包含成对的索引,这些索引代表我要提取的 A 的行。

例子

A = [ 1  2  3 %1
      4  5  6 %2
      7  8  9 %3
     10 11 12 %4
     13 14 15 %5
     16 17 18]%6
B = [1 2
     4 6]

我希望 C 包含 A 从 1 到 2 和从 4 到 6 的行

C = [ 1  2  3 %1
      4  5  6 %2
     10 11 12 %4
     13 14 15 %5
     16 17 18]%6

有没有不用遍历 B 的方法? 我尝试了 C = A(B,:) 但它没有用(我没想到它......)

最佳答案

使用 bsxfun冒号模拟能力利用了bsxfun(@lebsxfun(@ge -

N = size(A,1)
[R,~] = find((bsxfun(@le,B(:,1),1:N) & bsxfun(@ge,B(:,2),1:N)).')
out = A(R,:)

样本运行 #1 -

>> A
A =
     1     2     3
     4     5     6
     7     8     9
    10    11    12
    13    14    15
    16    17    18
>> B
B =
     1     2
     4     6
>> out
out =
     1     2     3
     4     5     6
    10    11    12
    13    14    15
    16    17    18

示例运行 #2(展示如何处理重叠)-

>> A
A =
     1     2     3
     4     5     6
     7     8     9
    10    11    12
    13    14    15
    16    17    18
>> B
B =
     1     2
     4     6
     3     5
>> out
out =
     1     2     3
     4     5     6
    10    11    12
    13    14    15
    16    17    18
     7     8     9
    10    11    12
    13    14    15

不是矢量化解决方案,但内存效率更高的解决方案可能是 colon operator -

idx = arrayfun(@colon, B(:,1), B(:,2), 'Uni', 0)
out = A([idx{:}],:)

关于matlab - 根据范围索引从矩阵中提取行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32524204/

相关文章:

matlab - 对于给定方差和 matlab 中的均值具有均匀分布的数字序列

postgresql - Postgres/PostGIS 上的 Gist 索引仍然很慢

python - 使用 Python 串行读取 MATLAB 单曲

parallel-processing - 有什么办法可以在 matlab 中为 spmd 命令添加一个开关?

用于操作非常大的矩阵的 Python 库

matlab - 在 MATLAB 中绘制 3-D 矩阵*值*

python - Pandas 根据条件移动列数据

python - 带有行号和列标签的 Pandas Dataframe 2D 选择

matlab - 打开由 Matlab 保存的 .fig 文件的程序

r - 列中非零或特定数字的频率