gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:12:41 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com