查找两个条目均为非零的一对向量中的所有行(Octave)

时间:2013-02-25 14:31:15

标签: matlab octave

我在Octave中有一个n x 2矩阵,我想找到矩阵(行,1)和矩阵(行,2)元素非零的每一行。我可以像这样使用for循环:

[nrows, ncols] = size(data);
for i = 1:nrows
    if(data(i, 1) ~= 0 && data(i, 2) ~= 0)
        % Do something
    end
end

问题在于n约为300万,并且Octave中的迭代需要永远。我觉得有一种方法可以通过查找来实现,但我还没有弄明白。

有人有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以创建使用逻辑索引:

idx = all(data(:,1:2)~=0, 2);

结果向量idx在每行中包含1 s,其中两个单元格都为非零,否则为0

答案 1 :(得分:0)

我认为在这种情况下(因为它与零值相关),以下也应该起作用

idx=(data(:,1).*data(:,2)~=0)

但@H.Muster的解决方案是适用于所有情况的解决方案,因此效果更好。

答案 2 :(得分:0)

如果性能问题:也许尝试将两列都转换为逻辑:

useful = and(logical(data(:,1)),logical(data(:,2)))

然后你可以再次使用逻辑索引:

filtered = data(useful,:)