2011-07-18 50 views
0

假設我有一個嵌套列表:{{2,0,3},{4,0,4},{0,0,9}}。我想改變一切00.00001,或其他一些小的值,從而使最終的結果是{{2,0.00001,3},{4,0.00001,4},{0.00001,0.00001,9}}在列表中更改'0以避免被0錯誤分隔

我怎麼會去這樣做,而無需使用ForIf功能?

在此先感謝。

+1

把零變成非常小的東西似乎不太可能是最優雅的解決方案。你究竟想要做什麼? – fletom

+1

我想分割兩個圖像來形成另一個圖像。圖像是灰度,像素值從0(黑色)到1(白色)。我們如何處理黑色像素的分割? – flamearchon

+2

@flame你想從'0/0'和'0/1'得到什麼結果? –

回答

3
{{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}} 
*) 

但是,正如@nomulous所言,這不太可能是實現您所追求的最佳方式。那麼,你想要做什麼?你試圖解決的實際問題是什麼?

編輯:在你的評論中你提到你試圖劃分圖像。在沒有看到更多的代碼,我建議是這樣的:

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] 

,提取數據,分歧的列表,允許除以零發生屈服ComplexInfinity,取代ComplexInfinity 1(最大允許),然後包裝Image圍繞結果列表。

也許如果你顯示更多的代碼,它會更容易建議更好的東西。

4

也許一個更好的解決方案是零,允許分裂,但抑制警告:

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}} 

但我想,如果你想更換Integer 0與0.00001,那麼你可以嘗試

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}}