如何找到包含特定元素的行矩阵索引?

时间:2016-05-30 16:07:57

标签: arrays matlab matrix

如果我有一个= [1 2 3 4; 2 3 4 0; 1 1 3 4; 0 0 0 1]并且我想找到至少包含3个元素[1 2 3 4]的行,例如第1,2,3行。我该怎么办? 提前谢谢

1 个答案:

答案 0 :(得分:4)

使用bsxfun,如下所示:

a=[1 2 3 4;5 6 7 1;2 3 1 7;3 1 1 2]; % matrix
v = [1 2 3]; % desired values
ind = find(all(any(bsxfun(@eq, a, reshape(v,1,1,[])), 2), 3));

这会将v重塑为第三维(reshape(v,1,1,[])),并将a的所有值与vbsxfun(@eq, ...))的所有值进行比较。然后 它选择行的索引(find(...)),以便所有期望值(all(..., 3))出现在该行的任何条目中(any(..., 2))。

要查找数组v中至少包含三个元素的行索引,可以将每行对应的计数求和,然后执行检测:

n = 3
ind = find(sum(any(bsxfun(@eq, a, reshape(v,1,1,[])), 2), 3)>=n)