У меня есть очень простой код, написанный для имитации цены акций, предполагающей случайное движение от -2% до + 2% в день (это слишком упрощенно, но для демонстрации я решил, что это проще, чем использовать формулу GMB).
У меня проблема в том, что это очень медленно, я понимаю, что это потому, что я использую двойные циклы. Из того, что я понимаю, я мог бы использовать векторизацию, но я не могу понять, как.
По сути, я создал 100 симуляций, предполагая 256 торговых дней в году, каждый день предыдущая цена акций умножалась на случайное число от 0,98 до 1,02.
В настоящее время я делаю это, используя вложенный цикл for. Как я понимаю, это нехорошо, но, как новичок, мне трудно векторизоваться. Я читал об этом в Интернете, и из того, что я понимаю, в основном, вместо того, чтобы использовать циклы, вы пытались бы преобразовать их в матрицы и использовать умножение матриц, но я не уверен, как применить это здесь. Может кто-то указать мне верное направление?
from numpy import exp, sqrt, log, linspace
from random import gauss
from random import uniform
import pandas as pd
nsims = 100
stpx = 100
days = 256
mainframe = pd.DataFrame(0, index = list(range(1,days)), columns = list(range(1,nsims)))
mainframe.iloc[0] = stpx
for i in range(0, nsims-1):
for x in range(1, days-1):
mainframe.iloc[x, i] = mainframe.iloc[x-1, i]* uniform(.98, 1.02)