2016-05-02 111 views
3

我想在Python中運行一個模擬,從而我繪製了一個給定兩個變量參數的集合級別的數組隨機遊走。Python迭代?

但是,我有一個問題,我不知道如何迭代,以便生成250個不同的隨機數插入公式。例如我已經定義了一個隨機數x,但由於它只是一個隨機數,所以Python會生成一條直線圖,因爲該公式只考慮了一個變量。

對於250個數據點,程序需要在0到1之間生成250個隨機數,以便能夠對數據運行隨機過程。但是,我不確定該從哪裏出發,並希望得到任何建議。

回答

0

該答案根據您希望應用隨機數的方式而變化。

但你可以做這樣的事情:

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

新: 鑑於我波動的理解是正確的,它只是平均收益率的標準差,是否正確?然後你需要做的是得到一個正態分佈的隨機數,平均值爲mu,標準差爲v。正如Severin指出的那樣,在numpy中有這樣的功能,即numpy.random.normal(loc,scale)其中loc = muscale = 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個的隨機變量的陣列。現在,如果你想在你的指數模型周圍存在一個幅度爲2.0的「隨機性」,那麼你只需將rndScale改爲2.0即可。

+0

這是布朗運動型模型的更多細節。我剛剛從Excel文件中回顧了我想要做的事情;我試圖在觀察中得到每個隨機數的標準正態分佈的倒數;即相當於Excel中的NORMSINV()。因此,在公式s1 = s0 * np.exp(k * t/250)#+(v * datapoints)* np.sqrt(t/250)中,我希望數據點變量引用此數字。我很感激任何建議,因爲我仍然很迷茫。 – optimisation2810

+0

我明白了。那麼你真正想要做的是從平均mu和標準差v的正態分佈中抽取一個隨機數?至少如果我正確閱讀wiki條目的波動性。然後查看更新的帖子。 –

+0

我目前正在嘗試運行代碼,但只是建議我爲該行獲取ValueError:plt.plot(np.arange(250),stock_total,c ='k')。 – optimisation2810