0

我在 Octave 中有 anx 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 中的迭代需要永远。我觉得有一种方法可以用 find 来做到这一点,但我还没有弄清楚。

有人有什么建议吗?

谢谢!

4

3 回答 3

2

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

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

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

于 2013-02-25T14:36:34.440 回答
0

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

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

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

于 2013-02-25T15:08:05.830 回答
0

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

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

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

filtered = data(useful,:)
于 2013-02-25T15:33:52.920 回答