Changing '0's in a list to avoid divide by 0 errors

Suppose I have a nested list: {{2,0,3},{4,0,4},{0,0,9}} . I would like to change all the 0 to 0.00001 , or some other small value, so that the final result is {{2,0.00001,3},{4,0.00001,4},{0.00001,0.00001,9}}

How would I go about doing so without using the For and If functions?

Thanks in advance.


Maybe a better solution is to allow the division by zero, but suppress the warning:

In[1]:= Quiet[1/{{2, 0, 3}, {4, 0, 4}, {0, 0, 9}}, Power::infy]
Out[1]= {{1/2,ComplexInfinity,1/3}, {1/4,ComplexInfinity,1/4}, {ComplexInfinity,ComplexInfinity,1/9}}

But I guess if you want to replace the Integer 0 with 0.00001, then you could try

In[2]:= {{2, 0, 3}, {4, 0, 4}, {0, 0, 9}} /. 0 -> 0.00001
       1/%
Out[2]= {{2,0.00001,3},{4,0.00001,4},{0.00001,0.00001,9}}
Out[3]= {{1/2,100000.,1/3},{1/4,100000.,1/4},{100000.,100000.,1/9}}

{{2, 0, 3}, {4, 0, 4}, {0, 0, 9}} /. {0 -> 0.0001}
(*
-> {{2,0.0001,3},{4,0.0001,4},{0.0001,0.0001,9}}
*)

However, as @nomulous said, it's unlikely that this is the best way to achieve whatever it is you're after. So, what are you trying to do? What is the actual problem you are trying to solve?

EDIT: In your comment you mention that you're trying to divide images. Without seeing more code, I'd suggest something like this:

i1 = Image[ {{0, 1, 0}, {1, 0, 1}, {0, 1, 0}}]
i2 = Image[ RandomReal[1, {3, 3}]]
Image[Quiet[i2[[1]]/i1[[1]]] /. ComplexInfinity -> 1]

which extracts the list of data, divides, allowing division by zero to occur yielding ComplexInfinity , replaces ComplexInfinity by 1 (the maximum allowed) and then wraps Image around the resulting list.

Perhaps if you show more code it will be easier to suggest something better.

链接地址: http://www.djcxy.com/p/20250.html

上一篇: 如何使用它们的权重标记图边

下一篇: 在列表中更改'0'以避免被0错误分隔