2013-05-06 97 views
1

的陣列內的陣列的存在我有陣列的numpy的數組:檢查陣列蟒

qv=array([[-1.075, -1.075, -3. ], 
     [-1.05 , -1.075, -3. ], 
     [-1.025, -1.075, -3. ], 
     ..., 
     [-0.975, -0.925, -2. ], 
     [-0.95 , -0.925, -2. ], 
     [-0.925, -0.925, -2. ]]) 

我想,以確定是否一個陣列被包含在2-d數組並返回它的索引。

qt=array([-1. , -1.05, -3. ]) 

我可以兩個數組轉換成列表,並使用list.index()函數:

qlist=qv.tolist() 
ql=qt.tolist() 
qindex=qlist.index(ql) 

但我想避免這樣做,因爲我認爲這將是一個性能命中。

+0

不要「認爲這將是一個性能打擊」。測量。 – Elazar 2013-05-06 23:27:53

+1

我會的。一旦變得清楚如何使用numpy來代替列表。 – Jen 2013-05-06 23:29:38

回答

3

這應該做的伎倆,

import numpy as np 
np.where((qv == qt).all(-1)) 

或者

import numpy as np 
tol = 1e-8 
diff = (qv - qt) 
np.where((abs(diff) < tol).all(-1)) 

當浮點精度問題發揮作用的第二種方法可能更合適。此外,如果您有很多qt需要測試,可能會有更好的方法。例如scipy.spatial.KDTree

+0

Hooray! +1用於浮點考慮。對於我的特定測試集,ipython中的%timeit表明您的方法爲30.5 ns,而對於列表方法,則爲770 us。謝謝! – Jen 2013-05-07 00:10:03