gpt4 book ai didi

python - 我怎样才能在 NumPy 中做这个 python 列表理解?

转载 作者:太空狗 更新时间:2023-10-30 02:28:01 24 4
gpt4 key购买 nike

假设我有一组值,r ,范围从 01 .我想删除所有距离中位数有一定阈值的值。我们假设该阈值为 0.5 , 和 len(r) = 3000 .然后为了屏蔽掉这个范围之外的所有值,我可以做一个简单的列表理解,我喜欢这样:

mask = np.array([ri < np.median(r)-0.5 or ri > np.median(r)+0.5 for ri in r])

如果我在上面使用计时器:

import time
import numpy as np

start = time.time()
r = np.random.random(3000)
m = np.median(r)
maxr,minr = m-0.5, m+0.5
mask = [ri<minr or ri>maxr for ri in r]
end = time.time()
print('Took %.4f seconds'%(end-start))

>>> Took 0.0010 seconds

有没有更快的方法来执行此列表理解并使用 NumPy 制作掩码? ?


编辑:

我尝试了以下几个建议,包括:

  • 元素或运算符:(r<minv) | (r>maxv)

  • Numpy 逻辑或:r[np.logical_or(r<minr, r>maxr)]

  • 绝对差值 bool 数组:abs(m-r) > 0.5

这是每个人在 300 次运行后的平均时间:

Python list comprehension: 0.6511 ms
Elementwise or: 0.0138 ms
Numpy logical or: 0.0241 ms
Absolute difference: 0.0248 ms

如您所见,按元素的 Or 总是最快的,快了将近两倍(不知道这将如何随数组元素扩展)。谁知道。

最佳答案

一个类轮...

new_mask = abs(np.median(r) - r) > 0.5

关于python - 我怎样才能在 NumPy 中做这个 python 列表理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38382601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com