Как ускорить операции с массивом python? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть массив 1D NumPy A формы (N на 1), где N = 4000000.Мне нужно запустить функцию (fcn) для каждого из ее элементов.

import bumpy as np
def fcn(a, B, c):
    return a - np.sqrt(c) * B) / np.sqrt(1 - c)

Поскольку B - это (M = 100 при P = 20), а c - скаляр, вывод функции - это массив размера M по P.

Я пробовал разныеметоды, но все они медленны, например:

for a in A:
    result = fcn(a, B, c)
    # do something with result...

Знаете ли вы, как ускорить его, например, с помощью многопроцессорной обработки или любым другим способом?

1 Ответ

0 голосов
/ 30 сентября 2019

Если у вас достаточно памяти, то самое простое, что предлагает @hpaulj:

for result in (A[:,None,None] - np.sqrt(c) * B) / np.sqrt(1 - c):
    # do stuff

Если у вас недостаточно памяти, по крайней мере, предварительно рассчитайте, что вы можете:

X = 1 / np.sqrt(1 - c)
Y = np.sqrt(c) * B / np.sqrt(1 - c)
for a in A:
    result = a * X - Y
    # do stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...