Динамический ввод для заполнения массива Numpy без цикла for для Монте-КарлоPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Динамический ввод для заполнения массива Numpy без цикла for для Монте-Карло

Сообщение Anonymous »

У меня есть элегантный код от других участников для Монте-Карло (случайное блуждание) с использованием numpy. Однако в настоящее время объем, или стандартное отклонение, является предоставляемой константой. В идеале оно должно меняться в зависимости от этапа во времени. Есть ли способ адаптировать этот код, чтобы сделать «vol» функцией индекса numpy? Я мог бы сделать это с помощью цикла for, но я стараюсь сохранить его векторизованным из соображений производительности.
import numpy as np

def montecarlo_brownian(start_value, T_years, steps, vol, rate = 0, sims = 1000):
""" generate random walks from a starting value for Monte Carlo analysis

Args:
start_value (float): starting value for random walks
T_year (float): number of years in question
steps (int): substeps within each year
vol (float): annualized standard deviation (ie, implied volatility)
rate (float): risk free interest rate
sims (int): number of simulations to execute

Returns:
(np.array) columns of random walks
"""
times = np.linspace(0, T_years, steps+1)
dt = times[1] - times[0]

B = np.random.normal(0, np.sqrt(dt), size=(sims, steps)).T
S = np.exp((rate - vol ** 2/ 2) * dt + vol * B)
S = start_value * S.cumprod(axis=0)
return S

комментатор Джаред запросил образец логики цикла for. Я бы определил функцию
def get_vol(t):
pass
#some function that calculates vol based on how much time is left

затем используйте что-то вроде:

def monte_carlo_with_changing_vol(S0, r, T, num_sims, num_steps, volatility):
dt = T / num_steps
paths = np.zeros((num_sims, num_steps + 1))
paths[:, 0] = S0

for i in range(num_sims):
for j in range(1, num_steps + 1):
current_vol = vol(j)
paths[i, j] = paths[i, j - 1] * np.exp((r - 0.5 * current_vol ** 2) * dt + current_vol * np.sqrt(dt) * np.random.normal(0, 1))

return paths


Подробнее здесь: https://stackoverflow.com/questions/791 ... onte-carlo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Динамический ввод для заполнения массива Numpy без цикла for для Монте-Карло
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Добавить динамическую дисперсию в модель Монте-Карло в numpy
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Добавить динамическую дисперсию в модель Монте-Карло в numpy
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Добавить динамическую дисперсию в модель Монте-Карло в numpy
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Монте-Карло с OpenMP
    Гость » » в форуме C++
    0 Ответы
    31 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»