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

时间:2017-06-22 16:37:22

标签: python arrays numpy indexing

我在索引文档上花了几天时间,但却找不到我想要的东西。

考虑一下:

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的{​​{1}}相等'c'的元素反刍 - 不是很有帮助。

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

2 个答案:

答案 0 :(得分:0)

你正在寻找的功能是numpy的地方。

https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.where.html

np.where(fac=='c')

将返回一个元组,其中包含与该值匹配的索引数组以及数据类型。

答案 1 :(得分:0)

根据您的需求,有几种方法可以使用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)