2017-02-11 3 views
1

numpy.where()を使用して要素のインデックスを調べようとしていますが、空の配列を返します。np.where()を使用して複雑な2D Python配列の要素のインデックスを見つけることができません

import numpy as np 
grid= np.mgrid[-2:2:5*1j, -2:2:11*1j] 
X , Y = grid[0], grid[1] 
complex_grid = X+1j*Y 
xid, yid= np.where(complex_grid == -1.0 - 0.8j) 
print(xid, yid) 

インデックス(1,3)は返されますが、空の配列とそのデータ型が返されます。 私は何が間違っていますか?

EDIT: - 私の主な目的は、グリッドから与えられた座標(x、y)に対応するインデックスを見つけることです。複雑なグリッドを作ったのは、グリッドから得られる2つの2Dマトリックスを融合できるからです。

+0

それは理由の範囲を計算するのと同じくらい簡単操作の後にあなたをかむことができます丸めの値で山車を比較することがほとんどない良いアイデアません。代わりに絶対差または相対差を小さな許容差と比較してください。また、 'np.allclose'と友人がいます。 –

+0

はい、同意します。複雑な場合でもallclose関数は機能しますか?そして、ここでどうすれば使用できますか? – Manish

+1

reduce操作なしで同じであると思う 'isclose'があります。 '.real'と'別途.imag'をして、はい、それは確かに問題だった 'logical_and'や'& ' –

答えて

1

浮動小数点値はまれではありませんので、一般的に浮動小数点値を直接比較することは悪い考えです。

あなたは、たとえば、値に与えられた近さをチェックするためにabs(difference) < epsilonのようなものを使用することができますしかし:

>>> xid, yid= np.where(np.abs(complex_grid -(-1.0 - 0.8j)) < 1e-10) 
>>> print(xid, yid) 
[1] [3] 

またはより良い:使用numpy.iscloseはすでにそれを行うが、相対および絶対許容誤差とnan取り扱いを可能にします同様に(あなたはこれらを必要とする場合):対等に山車を比較すると、常にdiceyあるので

>>> xid, yid= np.where(np.isclose(complex_grid, -1 - 0.8j))) 
>>> print(xid, yid) 
[1] [3] 
+0

と結合していない場合は私の推測では、(チェックされていない)、それは複雑受け入れるだろう。私はそれが分かっていたとしてもそれは問題ではないかもしれないと思っただけです。説明をありがとう。 – Manish

0

isclose()は、より良い選択です。

xid, yid = np.where(np.isclose(complex_grid, np.ones(complex_grid.shape) * (-1.0 - 0.8j))) 
関連する問題