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

标签 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 数组似乎应该有一种机制来以更简洁(和高效?)的方式实现同​​样的事情。 bool 数组可能是解决方案的一部分:

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

但这只会反省 fac 中等于 'c' 的元素——不是很有帮助。

关于如何使用 NumPy 实现这一点有什么建议吗?还是我应该对我所拥有的感到高兴?

最佳答案

有多种方法可以使用 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)
    

关于python - 获取与值匹配的数组元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44705047/

相关文章:

python - Pickling Matplotlib 绘图引发 PicklingError : Can't pickle 'RendererAgg' object

python - 使用 cython 分配到任意数组位置。分配速度取决于值?

jquery - Flask URL 路由 : url_for only passes first argument

python - FlaskApp 使用 mod_wsgi 在 apache 中返回 http 500

java - 这样做的正确方法是什么?

Javascript 访问多维数组对象

php - Mysql:在单个查询中从数据库和php数组中获取值

python - Numpy 函数慢吗?

python - 如何在 Python 中使用 Soundfile 将具有指定 SNR 的高斯噪声添加到音频文件中?

python - 为什么 a.dot(b) 比 a@b 快,尽管 Numpy 推荐 a@b