2016-02-24 74 views
-1

我正在處理一個名爲LON的經度數組,但我遇到了numpy.where()函數的一些問題。python where function does not work

>>> print LON[777,777] 
13.4635573678 
>>> print np.where(LON == 13.4635573678)[0] 
[] 
>>> print np.where(LON == 13.4635573678)[1] 
[] 

它沒有找到LON條目,其中陣列等於肯定存在的值。問題與我處理雙重變量的事實有關嗎?因爲到現在爲止np.where()一直工作得很好兩個整數,浮點數和字符串...

+3

13.4635573678不在您的陣列中。打印語句不顯示所有數字。試試'np.where(LON == LON [777,777])[0]'。 – timgeb

+0

是的,它讓我回到正確的答案......但它是一種咬尾巴的狗:)如何獲得我的LON [777,777]條目的所有數字? – urgeo

+0

你爲什麼要*想要所有數字? – timgeb

回答

3

一種方式來解決,這可能是使用np.where與近似匹配:

>>> X = np.linspace(1, 10, 100).reshape((10,10)) 
>>> np.where(abs(X - 6.3) < 0.1) 
(array([5, 5]), array([8, 9])) 
>>> X[np.where(abs(X - 6.3) < 0.1)] 
array([ 6.27272727, 6.36363636]) 

當然,這可能給如果epsilon(在本例中爲0.1)太大,但如果使用完全匹配,則數組中有多個匹配項,如果數組中有多個條目具有相同的座標,則會出現多個匹配項。

編輯:如指出in comments,您也可以使用np.isclose,即使是Python 2.7,其中math.isclose不可用。但請注意,np.isclose將不會給出座標數組,而是一組數字True/False。如果您需要座標,您可以再次輸入np.closenp.where的結果。

>>> np.where(np.isclose(X, 6.3636)) 
(array([5]), array([9])) 
>>> X[np.isclose(X, 6.3636)] 
array([ 6.36363636]) 

或者,你可以考慮改變,給了從LON數組你協調,也返回的數組值的位置的功能。這樣,您根本不需要使用np.where

+1

對於它的價值,你可以使用'np.isclose'來代替。例如:'X [np.isclose(X,6.3)]' –

+0

@JoeKington謝謝,不知道這個函數。將它添加到答案中。 –