python - 如何按行获取 numpy 数组的非零元素数?

标签 python numpy

我想找到所有条目都小于 1e-6 或非零值的数量小于 3 的行的索引。像这样的东西会很好:

import numpy as np

prob = np.random.rand(15, 500)
all_zero = np.where(prob.max(1) < 1e-6 | np.nonzero(prob, axis=1) < 3) 

最佳答案

我尝试测量目前提出的解决方案的执行时间:
基准数据:

prob = np.random.rand(10000, 500)

@Massifox ' 列表解决方案:

%%timeit
[i for i, val in enumerate(prob>1e-6)if val.sum() < 3]
# 39.5 ms ± 1.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

@Massifox ' 解决方案只有 numpy:

%%timeit
np.where(np.sum(prob>1e-6, axis=1) < 3)
# 9.92 ms ± 199 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

@a_guest的解决方案:

%%timeit
all_zero = np.logical_or(prob.max(axis=1) < 1e-6, np.sum(prob != 0, axis=1) < 3)
np.where(all_zero)
# 13.9 ms ± 150 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

最有效的解决方案似乎是第二种。

关于python - 如何按行获取 numpy 数组的非零元素数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57892615/

相关文章:

python - 通过python在文本文件中查找变量的数量

python - 如何为自定义数据类型定义 `bool` 转换?

python - 在 ubuntu 中安装 python 3.4 的 numpy

python - 使用 scipy curve_fit 拟合错误

python - 获取numpy中矩阵的对角线并排除元素

python - 在 Python 2.5 中的嵌套 For Range 循环中传递参数

Python确保对象出现在列表的末尾

python - 在 Python 3 中加速分配给定两个值的概率密度

Python-如何检查一个单词是否有小写和大写

python - 使用 selenium 在 Chrome 中接受对麦克风的请求