Конвертировать NumPy в CuPy - PullRequest
       19

Конвертировать NumPy в CuPy

0 голосов
/ 27 декабря 2018

В приведенном ниже коде у меня есть простой цикл for с NumPy, который я хотел бы заменить реализацией 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

В моей реальной функции длинавходные массивы a и b могут быть переменными и очень длинными.Обратите внимание, что QT зависит от m и длины b, и оба будут предоставлены всегда.Кроме того, можно было бы порекомендовать сделать какую-то традиционную свертку, но свертка не решает мою проблему.Свертывание дает мне только окончательные значения QT, но мне действительно нужно использовать промежуточные значения QT для другого вычисления (см. Строку argmin, которая зависит от некоторых предварительно вычисленных вычислений входных массивов) перед обновлением для следующей итерациидля цикла.

Кроме того, размеры a и b имеют длину около 1-100 миллионов элементов, а такие переменные, как b_mean или b_stddev, представляют собой скользящие окна для среднего и стандартного отклонения, соответственно, дляокно ith с длиной окна, равной m.

Итак, если b = [1, 3, 5, 7, 9] и m = 3, то:

b_mean[0] = 3  # (1+3+5)/3
b_mean[1] = 5  # (3+5+7)/3
b_mean[2] = 7  # (5+7+9)/3

Каков наилучший способ заменитьс CuPy, чтобы его можно было запускать на графическом процессоре?

Я был бы очень признателен за любую помощь в переносе этого кода на CuPy, чтобы можно было использовать вычисления GPU CUDA.

...