Чтобы полностью избежать цикла и использовать быстрые и чистые пиктонические векторизованные операции, вы можете написать свою операцию следующим образом:
import matplotlib.pyplot as plt
import numpy as np
T = 2
mu = 0.15
sigma = 0.10
S0 = 20
dt = 0.01
N = round(T/dt) ### Paths
simu = 20 ### number of simulations
i = 1
## creates an array with values from 0 to T with N elementes (T/dt)
t = np.linspace(0, T, N)
## result matrix creation not needed, thanks to gboffi for the hint :)
## random number showing the Wiener process
W = np.random.standard_normal(size=(simu, N))
W = np.cumsum(W, axis=1)*np.sqrt(dt) ### standard brownian motion ###
X = (mu-0.5*sigma**2)*t + sigma*W
res = S0*np.exp(X) ### new Stock prices based on the simulated returns ###
Теперь ваши результаты сохраняются в матрице real ,или правильно np.ndarray
.np.ndarray
- это стандартный формат массива numpy
и, таким образом, наиболее широко используемый и поддерживаемый формат массива.
Чтобы отобразить его, вам нужно предоставить дополнительную информацию, например: Хотите ли вы построить каждую строку массива результатов??Это будет выглядеть следующим образом:
for i in range(simu):
plt.plot(t, res[i])
plt.show()
Если вы хотите проверить согласованность формы после расчета, вы можете сделать следующее:
assert res.shape == (simu, N), 'Calculation faulty!'