将NumPy转换为CuPy

时间:2018-12-27 14:07:06

标签: cupy

在下面的代码中,我有一个NumPy的简单for循环,希望将其替换为CuPy实现。

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]


    # The next line is not the REAL calculation below but a proxy
    # Use QT above 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

在我的实函数中,输入数组ab的长度可以是可变的,并且很长。请注意,QT取决于mb的长度,并且始终会同时提供两者。另外,可能会建议您进行某种传统的卷积运算,但是卷积运算并不能解决我的问题。卷积仅给我最终的QT,但实际上我需要使用中间的QT值进行另一次计算(请参阅argmin行,这取决于输入数组的某些预先计算得出的结果)在for循环的下一次迭代中对其进行更新。

此外,ab的大小约为1亿个元素,而变量b_meanb_stddev则是均值和标准的滑动窗口窗口长度等于ith的{​​{1}}窗口的偏差。

因此,如果mb = [1, 3, 5, 7, 9],则:

m = 3

用CuPy替换for循环以便可以在GPU上运行的最佳方法是什么?

对于将代码移植到CuPy以便我可以利用GPU CUDA计算的任何帮助,我将不胜感激。

0 个答案:

没有答案