2011-12-06 15 views
8

numpyextract関数を使用して、配列の要素と一致させることができます。次のコードは、配列'a.'と完全に一致します。 を'.'を含むすべての要素に一致させたいとします。どうすればよいですか?この場合、2つのマッチが存在することに注意してください。私はまた、マッチの行と列の番号を取得したいと思います。このメソッドは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

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.']]) 
>>> x[np.char.find(x, '.') > -1] 
array(['a.', 'g.'], 
     dtype='|S2') 

EDIT:コメント欄にリクエストを1として ...あなたは、ターゲット条件が真であるところのインデックスを知りたい場合は、使用をあなたがstring operationsを使用することができます

>>> 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

これは私のために働く、ありがとう。 –

関連する問題