python - 如何加快python中的numpy数组布尔掩码?
问题描述
我需要在 python 中加速以下布尔掩码:
import numpy as np
# test dataset
n=1000000
mask = np.random.choice(a=[False, True], size=(n,), p=[0.8, 0.2])
arr = np.random.rand(n)
# the code I need to speed up:
res = arr[mask]
有什么想法可以让它在 python 中更快吗?
解决方案
我写了一个 numba 实现,它的性能几乎和 numpy 一样。
import numba as nb
import numpy as np
@nb.njit(parallel=False, fastmath=True)
def array_masking_float(arr, mask, res):
j=0
for i in nb.prange(mask.shape[0]):
if mask[i] == True:
res[j] = arr[i]
j += 1
任何人都可以提出更好的解决方案吗?
推荐阅读
- python - 如果两个 Tree 具有相同的值节点,则使用 set 计数
- laravel - 查询与 slug 而不是 id 的 hasMany 关系?
- nginx - 如何配置 nginx 反向代理
- batch-file - 如何运行批处理脚本以获取文本文件中的输出
- r - 如何使用 plotweb 二分中的 ifelse() 语句根据交互值更改交互的颜色?
- jquery - Angular 5 Jquery问题
- python - 合并熊猫df中的特定值
- computer-vision - 对象跟踪上下文中的本地和全局数据关联有什么区别?
- sql-server - 如何将 XML 数据列表存储在表中
- javascript - Angular 和浏览器在加载数据方面的限制