2013-06-05 44 views

回答

4

当然 - 其中A是你的矩阵,

A(A==0) = my_small_number; 
3

假设你的矩阵称为A

A(A==0) = eps; 
5

直接的回答是:

M(M == 0) = realmin; 

这不正是你请求,用一个小数字替换零。看到这样做以矢量化的方式隐式搜索零。不需要循环。 (这是一种MATLAB方法,避免了那些显式和慢速循环。)

或者,您可以使用max,因为负数不会是问题。所以

M = max(M,realmin); 

也将工作。再次,这是一个矢量化的解决方案。如果没有经过仔细的测试,我不确定哪一个更快,但肯定会被接受。

请注意,我已经在这里使用realmin而不是eps,因为它实际上可以用双精度数字来表示。但使用任何小数字对你来说都是有意义的。

log10(realmin) 
ans = 
 -307.6527 

将此与EPS进行比较。

log10(eps) 
ans = 
    -15.6536 
+0

'-realmax'和'-Inf'的体积要小得多。 :-) – horchler