在我的代码中,我需要将矩阵的每个值除以另一个矩阵的值。我可以使用A./B,但是B中的一些元素是0。我知道,如果B(i,j) = 0,所以A(i,j)也是0,我想要0/0 =0。所以我写了一个函数div,我使用bsxfun,但是我没有0,我有NaN:
A = [1,0;1,1];
B = [1,0;1,2];
function n = div(a,b)
if(b==0)
n = 0;
else
n = a./b;
end
end
C = bsxfun(@div,A,B);发布于 2017-09-15 20:16:12
为什么不直接替换不想要的值呢?
C=A./B;
C(A==0 & B==0)=0;您可以执行C(isnan(C))=0;,但是这将取代所有的NaN,即使不是由0/0创建的。如果零总是发生在一起,那么只有C(B==0)=0;就行了
发布于 2018-08-22 12:57:28
如果你知道你的B中的非零值永远不会小于一个很小的数eps (例如1e-300),一个简单的技巧就是将eps添加到B中,所有的非零值都保持不变,而所有的零值都变成eps。当除以0/eps时,得到了期望的结果。
https://stackoverflow.com/questions/46246864
复制相似问题