我在索引文档上花了几天时间,但却找不到我想要的东西。
考虑一下:
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实现这一目标的任何建议?或者我应该对我所拥有的东西感到满意?
答案 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'])
>>> np.where(fac == 'c')
(array([5, 6, 7], dtype=int64),)
>>> np.argwhere(fac == 'c')
array([[5],
[6],
[7]], dtype=int64)
>>> np.flatnonzero(fac == 'c')
array([5, 6, 7], dtype=int64)