Как я могу использовать NumPy для эффективного расчета серии? - PullRequest
4 голосов
/ 21 февраля 2012

Я хочу создать массив в numpy, который содержит значения математического ряда, в данном примере это квадрат предыдущего значения, дающий одно начальное значение, то есть a_0 = 2, a_1 = 4, a_3 = 16,...

Пытаясь использовать векторизацию в numpy, я подумал, что это может сработать:

import numpy as np
a = np.array([2,0,0,0,0])
a[1:] = a[0:-1]**2

, но результат будет

array([2, 4, 0, 0, 0])

Теперь я понял, что numpy делаетвнутренне создайте временный массив для вывода и в конце копируете этот массив, поэтому он терпит неудачу для значений, которые равны нулю в исходном массиве.Есть ли способ векторизации этой функции, используя Numpy, Numberxpr или другие инструменты?Какие другие способы существуют для эффективного вычисления значений ряда, когда доступны быстрые функции numpy без использования цикла for?

1 Ответ

6 голосов
/ 21 февраля 2012

Нет общего способа векторизовать определения рекурсивной последовательности в NumPy. Этот конкретный случай довольно легко написать без цикла for:

>>> 2 ** 2 ** numpy.arange(5)
array([    2,     4,    16,   256, 65536])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...