我一直在用裁切這一段時間的一個變量:的Python:暗算功能
我有依賴於五(5)個變量是可以解決前一個函數(布萊克 - 斯科爾斯) 。在我解決了這個BS實例的價格之後,我想創建一系列不同的輸入(例如時間),並將它們與相應的輸出(解決方案,所有其他變量保持不變)進行比較。
所以希望我想
class BS
def __init__(self, args)
self.a = float(args[0])
self.b = float(args[1])
self.c = float(args[2])
self.d = float(args[3])
self.e = float(args[4])
...
...
the math
...
...
現在密謀什麼的,我可以創建類,適用於計算從T或一段時間價格的方法的一個實例。
def price(self)
'math that only requires T'
return price
所以,我只需要運行BS.price(),並可以輸出類似
t = range(T-200, T+200, 1)
prices = [BS.price() for x in t]
rhos = [BS.rho() for x in t]
vegas = [BS.vega() for x in t]
parities = [BS.parity() for x in t]
pylab.plot(prices,t)
pylab.plot(rhos,t)
pylab.plot(vegas,t)
pylab.plot(parities,t)
如果價格的唯一變量是時間。有沒有更好的方法來觀察python的單變量依賴關係?我寧願R,但這不取決於我。
感謝您的幫助!
編輯:我不知道如何在時間變量正在進行math.sqrt()和scipy.cdf()等數學運算時使用列表解析。有沒有辦法做到這一點?我知道如何建立依賴變量t的函數,浮點數。我如何將值列表輸入到math.sqrt()或scipy.cdf()?謝謝您的幫助!
它凡在你的列表中理解更新時間變量被傳遞到類目前尚不清楚。一旦你創建了一個BS的實例,那麼BS.price()將會是一個由參數決定的常量。在您的設計下,您需要爲每個不同的時間創建新的BS實例。在這種情況下,讓BS類接受一個時間列表作爲參數,以及固定的其他參數不是更好嗎?還要注意,你不是在你的示例代碼中創建一個BS對象,所以除非'price'是一個靜態方法(使用裝飾器),否則你不能以這種方式調用它。 – ely 2012-07-30 01:53:51
當時間變量正在進行math.sqrt()和scipy.cdf()等數學運算時,我不知道如何使用列表解析。有沒有辦法做到這一點?我知道如何建立依賴變量t的函數,浮點數。我如何將值列表輸入到math.sqrt()或scipy.cdf()?謝謝您的幫助! – Jared 2012-07-30 02:04:09
如果你的函數有多個參數,其中一個選項是創建一個lambda,其中除了時間都是固定的。假設你有'my_price_func(a,b,c,d,time)'...那麼只需定義'fixed_args = lambda t:my_price_func(a = self.a,b = self.b,c = self.c,d = self.d,time = t)'現在你可以在類定義中調用'[fixed_args(t)for time_range]'。這是一個混亂的解決方案,因爲你選擇的類設計不是封裝Black Scholes算法的好方法。我建議首先變得更加熟悉python。問一些關於列表解析的簡化例子Q. – ely 2012-07-30 02:29:58