Вы правы, что следует избегать циклов Python, если вы можете векторизовать вычисления. Нет никакой причины инициализировать z
нулями. Ваш текущий вывод для z
:
array([0. , 0. , 0.00273973, 0.00820417, 0.01635591,
0.02713557, 0.04046248, 0.0562357 , 0.07433529, 0.09462383,...]
Я не уверен, что двойные значения 0
действительно желательны (я обновлю, если так). Самая простая замена для текущего подхода - просто использовать numpy.cumprod
:
import numpy as np
def foo(n):
return(365-n)/365
lim = 50
x = np.arange(0, lim, 1)
y = foo(x)
z = 1 - np.cumprod(y)