如何在不使用循环的情况下仅减少矩阵的非零元素?

时间:2018-06-16 03:35:52

标签: matlab matrix

是否有一种简单的方法可以在不使用循环的情况下仅减少矩阵的非零元素?以下是我使用循环的方法:

NAV = [5 0 8 4 3 0 0];
for i = 1:length(NAV)
    if NAV(i)> 0
       NAV(i) = NAV(i)-1;
    end
end

但我正在寻找一个班轮。

1 个答案:

答案 0 :(得分:2)

找到非零元素,减去1并将它们替换为它们的索引

NAV(NAV~=0) = NAV(NAV~=0)-1;

顺便说一下,你的代码没有做你所要求的。你的代码减少了正面元素;不是非零元素。

循环的矢量化版本是:

NAV(NAV>0) = NAV(NAV>0)-1;