如何根据一次适用于不同列的条件提取矩阵行?

时间:2016-08-26 04:53:01

标签: arrays matlab matrix

例如,假设我有一个3列的新闻通知矩阵,其中第一列给出序列中新闻的序列号,第二列给出新闻的类别,第三列给出是否通知是否打开(二进制,1表示读取,0表示未读取)。因此,摘录可能如下所示:

1    12     1
2    13     0
3    13     1
4    12     0
5    14     1
6    13     0
7    12     0
8    13     1
9    14     0
10   12     1

我想要读取第12类通知的所有行。所以,输出应该是这样的:

1    12     1
10   12     1

因此,如果数据矩阵被称为input,并且我想要的结果矩阵被命名为output,我将编写以下代码:

for i=1:size(input,1)
    temp = input(input(:,2)==12,:);
    output = temp(temp(:,3)==1,:);
end

但我认为这在MATLAB中应该是一件微不足道的事情。那么,是否有一个班轮可以做到这一点?

2 个答案:

答案 0 :(得分:4)

output=input(find(input(:,2)==12 & input(:,3)==1),:)

答案 1 :(得分:0)

这是一个使用假定为快速内置函数ismember的解决方案,它实际上是您想要实现的功能的专用函数:

%// data
A =[1    12     1
    2    13     0
    3    13     1
    4    12     0
    5    14     1
    6    13     0
    7    12     0
    8    13     1
    9    14     0
    10   12     1]

%// sequence to search for
x = [ 12 1 ]

%// filtering
out = A( ismember(A(:,2:3),x,'rows'), : )
out =

     1    12     1
    10    12     1