8

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')
1
  • 4
    It would be less confusing to write x == 'a.', not that it helps answer you question Commented Dec 6, 2011 at 21:31

2 Answers 2

9

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)]
Sign up to request clarification or add additional context in comments.

4 Comments

Nice, never knew about char
Thanks. Any way of finding the row and column?
@mac: See comment at the bottom of the main question. I couldn't fit it into SO's notion of a comment.
@FaheemMitha - Sorry, my bad. You should compare with >-1 as 0 is the valid positional index for "found as first character"... (You should probably remove the edited part if it solves, as it will only confuse future visitors...).
3

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

1 Comment

Thanks. Any way of finding the row and column?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.