Python迭代?

时间:2016-05-02 16:07:21

标签: python random

我正在尝试在Python中运行一个模拟,我给出了一个给定两个变量参数的设置级别的数组的随机游走。

但是,我遇到了一个问题,我不知道如何迭代,以便生成250个不同的随机数以插入公式。例如我已经定义了一个随机数x,但由于它只是一个随机数,因此Python会生成一条直线图,因为公式只考虑了一个变量。

对于250个数据点,程序需要生成0到1之间的250个随机数,以便能够对数据运行随机过程。但是,我不知道从哪里可以去,并希望得到任何建议。

3 个答案:

答案 0 :(得分:2)

鉴于我对波动率的理解是正确的,它只是平均收益的标准差,对吗?然后你需要做的就是得到一个正态分布的随机数,其平均值为 mu ,标准差 v 。正如Severin指出的那样,numpy中有一个函数可以做到这一点,即 numpy.random.normal(loc,scale)其中 loc = mu scale = v 。见下面的例子。我试图明确编写每一步。一旦你对numpy / python感到满意,你可以用1或2行来完成大部分工作。

import numpy as np
import matplotlib.pylab as plt

# Initial parameters:
#-------------------
# mean return per step
mu = 0.1
# volatility
v = 0.06
# starting stock price
s0 = 500

# Looks like compound annual growth rate, but isn't that exactly what you want
# to determine from the simulation?
k = mu-(v**2)/2

# Iterate random walk, assuming no history within the changes.
stock_price_changes = []
for t in xrange(250):
    rnd = np.random.normal(loc=mu,scale=v)
    stock_price_changes.append(rnd)

# Add up all stock changes and add the initial stock price
stock_total = np.cumsum(stock_price_changes) + s0

# Plot the whole thing
plt.figure(figsize=(7,7),edgecolor='k',facecolor='w')
plt.plot(np.arange(250),stock_total,c='k')
plt.xlabel('Trading Days')
plt.ylabel('Price')
plt.tight_layout()
plt.show()

<强>旧: 也许我并没有真正理解这个问题,但你不想编写一个真实的问题。随意走吧?它只是为您的指数模型添加随机性?我想最简单的方法是使用你已导入的numpy。您可以像这样挤压随机数生成:

...
k = mu-(v**2)/2

t=np.arange(0,250)
s1=s0*np.exp(k*t/250) #+(v*datapoints)*np.sqrt(t/250)

rndScaling = 1.0
s1 += rndScaling * 2.0 * (np.random.rand(250) - 0.5)
...

2.0 *(np.random.rand(250) - 0.5)表达式产生一个数组,其中包含介于-1和+1之间的250个随机变量。现在,如果你想要随机性&#39;在你的指数模型周围,振幅为2.0,你只需将rndScale更改为2.0。

答案 1 :(得分:0)

答案的变化取决于您希望如何应用随机数。

但你可以这样做:

tt=np.arange(0,250)
s1=[(s0+random())*np.exp(k*t/250) for t in tt] 

答案 2 :(得分:0)

布朗运动模拟所需要的是获得正态分布(a.k.a。高斯)随机数的向量。您不需要像Excel那样需要任何正常的反转,但请致电

v = np.random.normal(0.0, 1.0, 250)

您将获得N(0,1)分布数字的向量。更多详情请见http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.random.normal.html

更新

B中。 Scholz代码对我来说很好......