我有一个矩阵A
和一个向量b
。我不知道它们的大小,大小不同,因为它是另一个函数的输出。我想要做的是按一列(假设第 j 列)过滤 A
,该列至少有一个位于 b
中的值。
如何在不测量 b 的大小并连接每个过滤结果的情况下执行此操作。现在,代码是这样的(假设j是给定值)
bsize=size(b,1);
for i=1:bsize
if i==1
a=A(A(:,j)==b(i),:);
else
a=[a; A(A(:,j)==b(i),:)];
end
end
我想编写一个更快的解决方案。
我添加一个数字示例只是为了清楚起见。这么说吧
A=[2 4
7 14
11 13
15 14]
和b=[4 14]
我想要做的是过滤以获得第二列中值为4和14的A
矩阵,b
的元素以获得以下输出。
A=[2 4
7 14
15 14]
在我的数据中,A
有超过 12000 行,b
有超过 100 个元素。它并不总是必须是第二列,有时列索引会发生变化,但这不是现在的问题。
最佳答案
使用ismember
函数创建 logical index基于 A
的列 j=2
和向量 b
,并使用该索引进入 A
的行:
output = A(ismember(A(:,j), b), :);
关于Matlab - 通过具有特定值来过滤矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44556470/