gpt4 book ai didi

python - 用 Numpy 向量化操作替换 For 循环

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

在下面的代码中,我有一个简单的 for 循环,我希望用更快的矢量化 numpy 操作替换它。

import numpy as np

b = np.array([9,8100,-60,7], dtype=np.float64)
a = np.array([584,-11,23,79,1001,0,-19], dtype=np.float64)
m = 3
n = b.shape[0]
l = n-m+1
k = a.shape[0]-m+1

QT = np.array([-85224., 181461., 580047., 8108811., 10149.])
QT_first = QT.copy()

out = [None] * l
for i in range(1, l):
QT[1:] = QT[:k-1] - b[i-1]*a[:k-1] + b[i-1+m]*a[-(k-1):]
QT[0] = QT_first[i]

# Update: Use this QT to do something with the ith element of array x
# As i updates in each iteration, QT changes
out[i] = np.argmin((QT + b_mean[i] * m) / (b_stddev[i] * m * a_stddev))

return out

我需要一个足够通用的解决方案来处理更长的数组。请注意,QT 取决于 mb 的长度,并且将始终提供。

如何用 numpy 向量化操作替换 for 循环以使其更快?

更新

我修改了原始代码以更清楚地说明为什么卷积不能解决我的问题。 Convolve 只给了我最终的 QT,但我实际上需要在为 for 循环的迭代更新它之前使用中间 QT 值进行另一次计算。

最佳答案

我还没有足够详细地研究它以确切知道它在做什么 - b[i-1]*a[:k-1] + b[i-1+m]*a[-( k-1):]。但我怀疑它可以在没有 i 循环的情况下编写。某种 -b[slice1]*a[slice2] + b[slice3]*a[slice4]

留下是否的问题

for i in range(1, l):
QT[1:] = QT[:k-1] + c[i]
QT[0] = QT_first[i]

本质上是串行的和迭代的。你可能比我更了解发生了什么。我必须执行一些手动循环才能了解正在发生的事情。

关于python - 用 Numpy 向量化操作替换 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43108329/

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