简体   繁体   中英

finding element of numpy array that satisfies condition

One can use numpy 's extract function to match an element in an array. The following code matches an element 'a.' exactly in an array. Suppose I want to match all elements containing '.' , how would I do that? Note that in this case, there would be two matches. I'd also like to get the row and column number of the matches. The method doesn't have to use extract ; any method will do. Thanks.

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

You can use the string operations :

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

EDIT: As per request in the comments... If you want to find out the indexes of where the target condition is true, use numpy.where :

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

or

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

How about this?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM