我在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中的迭代需要永远。我觉得有一种方法可以通过查找来实现,但我还没有弄明白。
有人有什么建议吗?
谢谢!
答案 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,:)