2017-06-22 173 views
3

我已经在索引文档上花了几天的时间,但没有找到我要找的内容。获取与数值匹配的数组元素的索引

考虑一下:

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] 

但是,只有反刍的fac那等于'c'元素 - 不是非常有帮助。

有关如何使用NumPy实现这一点的任何建议?或者我应该对我所拥有的东西感到满意?

+0

如果你是幸福的'FAC =='c''真/假值,使用'np.nonzero'(或'np.where')来获得真值的索引。 – hpaulj

回答

0

有几种方式与NumPy的到ADRESS此,根据您的需求,您可以使用:

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