【问题标题】:finding element of numpy array that satisfies condition找到满足条件的numpy数组的元素
【发布时间】:2012-01-14 11:29:27
【问题描述】:

可以使用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')

【问题讨论】:

  • x == 'a.' 不会那么混乱,并不是说它有助于回答你的问题

标签: python search numpy


【解决方案1】:

您可以使用string operations:

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

编辑:根据 cmets 中的请求...如果您想找出目标条件为真的索引,请使用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)]

【讨论】:

  • 很好,从来不知道char
  • 谢谢。有什么方法可以找到行和列?
  • @mac:见主要问题底部的评论。我无法将其纳入 SO 的评论概念。
  • @FaheemMitha - 对不起,我的错。您应该与>-1 进行比较,因为0 是“作为第一个字符找到”的有效位置索引...(如果它解决了,您可能应该删除已编辑的部分,因为它只会让未来的访问者感到困惑...)。
【解决方案2】:

这个怎么样?

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

【讨论】:

  • 谢谢。有什么方法可以找到行和列?
猜你喜欢
  • 2021-02-15
  • 2019-11-14
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 2021-12-14
  • 2011-04-16
  • 2018-07-26
相关资源
最近更新 更多