2011-12-06 54 views
8

可以使用numpyextract函數來匹配數組中的元素。以下代碼完全匹配數組中的一個元素'a.'。假設我想要 匹配包含'.'的所有元素,我該怎麼做?請注意,在這種情況下,會有兩個匹配項。我也想獲得比賽的行號和列號。該方法不必使用extract;任何方法都可以。謝謝。查找滿足條件的numpy數組的元素

In [110]: x = np.array([['a.','cd'],['ef','g.']]) 

In [111]: 'a.' == x 
Out[111]: 
array([[ True, False], 
     [False, False]], dtype=bool) 

In [112]: np.extract('a.' == x, x) 
Out[112]: 
array(['a.'], 
     dtype='|S2') 
+4

寫'x =='a.''不會令人困惑,它不會幫助你回答問題 – Benjamin

回答

9

可以使用string operations

>>> import numpy as np 
>>> x = np.array([['a.','cd'],['ef','g.']]) 
>>> x[np.char.find(x, '.') > -1] 
array(['a.', 'g.'], 
     dtype='|S2') 

編輯:根據要求在評論...如果你想找出其中目標條件爲真索引,使用numpy.where

>>> np.where(np.char.find(x, '.') > -1) 
(array([0, 1]), array([0, 1])) 

>>> zip(*np.where(np.char.find(x, '.') > -1)) 
[(0, 0), (1, 1)] 
+3

不錯,從來不知道'char' – Benjamin

+0

謝謝。任何找到行和列的方法? –

+0

@mac:在主要問題的底部查看評論。我無法將它納入SO的評論意見。 –

3

這個怎麼樣?

>>> import numpy as np 
>>> x = np.array([['a.','cd'],['ef','g.']]) 
>>> selector = np.array(['.' in s for s in x.flat]).reshape(x.shape) 
>>> x[selector] 
array(['a.', 'g.'], 
     dtype='|S2') 
+0

不錯的解決方案! – Benjamin

+0

謝謝。任何找到行和列的方法? –

+0

這適用於我,謝謝。 –

相關問題