gpt4 book ai didi

python numpy - 有更快的卷积方法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:39 24 4
gpt4 key购买 nike

我有一个非常大的 numpy 数组(100 万个整数)。我正在使用 np.convolve 来找到该数组的“最密集”区域。 “desnsest”区域是指当窗口求和时具有最高数字的固定长度的窗口。让我用代码告诉你:

import numpy as np

example = np.array([0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0,1,0])
window_size = 10
density = np.convolve(example, np.ones([window_size]), mode='valid')
print(density)
# [7.0, 7.0, 8.0, 9.0, 9.0, 9.0, 8.0, 7.0, 6.0, 6.0, 5.0, 5.0, 5.0, 5.0, 4.0, 4.0, 4.0, 4.0, 4.0, 3.0, 3.0, 4.0, 3.0]

然后我可以使用 np.argmax(density) 获取最高密度区域 3 的起始索引。

无论如何,这个例子运行得很快。但是当对超过百万个元素的数组进行卷积并且窗口大小为 10,000 时,需要 2 秒才能完成。如果我选择 500,000 的 windows_size,则需要 3 分钟才能完成。

是否有更好的方法来对具有特定窗口大小的数组求和以加快速度?如果我将其转换为 Pandas 系列,我是否可以在那里使用一些东西?

感谢您的帮助!

最佳答案

尝试使用 scipy.signal.convolve .它可以选择使用快速傅立叶变换 (FFT) 计算卷积,对于您提到的数组大小,这应该快得多。

使用长度为 1000000 的数组 example 并将其与长度为 10000 的数组进行卷积,np.convolve 在我的计算机上花费了大约 1.45 秒计算机,scipy.signal.convolve 花费了 22.7 毫秒。

关于python numpy - 有更快的卷积方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53550764/

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