获取数组中与特定值匹配的元素的索引

4

我花了几天的时间研究索引文档,但没有找到我需要的内容。

考虑以下情况:

import numpy
fac=numpy.asarray(['a','a','a','b','b','c','c','c'])
f_ind = [x for x in range(len(fac)) if fac[x] == 'c']

它返回[5,6,7],就像我所想的那样。然而,似乎NumPy数组应该有一种更简洁(和有效?)的方法来实现相同的效果。布尔数组可能是解决方案的一部分:

ba = (fac == 'c')
f_vals = fac[ba]

但这只是将等于'c'fac元素重复 -- 没有什么帮助。

有没有使用NumPy实现这个功能的建议?或者我应该对目前的结果感到满意呢?


如果您对fac=='c'的True/False值感到满意,请使用np.nonzero(或np.where)获取True值的索引。 - hpaulj
2个回答

3

有几种方法可以使用NumPy解决这个问题,具体取决于您的需求,您可以使用以下方式:

>>> import numpy as np
>>> fac = np.asarray(['a','a','a','b','b','c','c','c'])
  • where:

    >>> np.where(fac == 'c')
    (array([5, 6, 7], dtype=int64),)
    
  • argwhere:

    >>> np.argwhere(fac == 'c')
    array([[5],
           [6],
           [7]], dtype=int64)
    
  • flatnonzero:

    >>> np.flatnonzero(fac == 'c')
    array([5, 6, 7], dtype=int64)
    

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接