查找满足条件的numpy数组元素

8 投票
2 回答
10322 浏览
提问于 2025-04-17 07:50

可以使用 numpyextract 函数来查找数组中的某个元素。下面的代码是用来精确匹配数组中的元素 '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 个回答

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

你可以使用字符串操作

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

撰写回答