поиск элемента массива numpy, удовлетворяющего условию
можно использовать numpy
' s extract
функция для соответствия элементу в массиве. Следующий код соответствует элементу 'a.'
точно в массиве. Предположим, я хочу ...
чтобы соответствовать всем элементам, содержащим '.'
, как бы я это сделал? Обратите внимание, что в этом случае было бы два матча. Я также хотел бы получить номер строки и столбца совпадений. Метод не должен использовать extract
; подойдет любой метод. Спасибо.
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')
2 ответов
можно использовать строковые операции:
>>> import numpy as np
>>> x = np.array([['a.','cd'],['ef','g.']])
>>> x[np.char.find(x, '.') > -1]
array(['a.', 'g.'],
dtype='|S2')
EDIT: согласно запросу в комментариях... Если вы хотите узнать индексы, где целевое условие истинно, используйте и NumPy.где:
>>> 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)]
Как насчет этого?
>>> 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')