2013-06-05 46 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