2011-07-18 9 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

私は別のイメージを形成するために2つのイメージを分割しようとしています。画像はグレースケールで、ピクセル値は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を得発生することができ、分割し、1だけComplexInfinityを置き換える(最大許容)、その後、ラップ結果リストには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}} 

をしかし、私はあなたが0.00001でInteger 0を交換したい場合は、その後、あなたは

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}} 
を試すことができると思います
関連する問題