Как я могу ускорить NumPy операции? - PullRequest
0 голосов
/ 01 декабря 2018

В настоящее время у меня есть кадр данных, как показано ниже:

enter image description here

Этот кадр данных имеет 1 миллион строк.Я хотел бы выполнить следующую операцию:

Скажите, для строки 0, b равен 6. Я хотел бы создать еще один столбец, c.

C для строки 0 вычисляется как среднеестроки (т.е. 8 строк на изображении выше), где b находится в диапазоне от 6-3 до 6 + 3 (здесь 3 - фиксированное число для всех строк).

В настоящее время я выполнил эту операцию с помощьюпреобразование столбца a и столбца b в числовые массивы, а затем цикл.Ниже я приложил код:

index = range(0,1000000)
columns = ['A','B']
data = np.array([np.random.randint(10, size=1000000),np.random.randint(10, size=1000000)]).T
df = pd.DataFrame(data, index=index, columns=columns)

values_b = df.B.values
values_a = df.A.values
sum_array = []
program_starts = time.time()
for i in range(df.shape[0]):
    value_index = [values_b[i] - 3,values_b[i] + 3]
    sum_array.append(np.sum(values_a[value_index]))

time_now = time.time()
print('time taken ',time_now- program_starts)

Этот код занимает около 8 секунд для запуска.

Как я могу сделать это быстрее?Я попытался распараллелить задачу, разделив массив на 0,1 миллиона строк, а затем вызвал цикл for для каждого 0,1 миллиона массивов.Но это занимает еще больше времени.Пожалуйста, любая помощь будет оценена.

...