遍历具有自定义类的多个值的字典?

时间:2020-03-14 21:03:50

标签: python

我有以下代码:

import numpy as np
from scipy.stats import norm


class European_Option:
    def __init__(self, **kwargs):
        self.S = kwargs.get("S")
        self.X = params.get("X")
        self.sigma = params.get("sigma")
        self.r = params.get("r")
        self.T = params.get("T")
        self.d1 = (np.log(self.S / self.X) + (self.r + 0.5 * self.sigma ** 2) * (self.T)) / (
            self.sigma * np.sqrt(self.T)
        )
        self.d2 = (np.log(self.S / self.X) + (self.r - 0.5 * self.sigma ** 2) * (self.T)) / (
            self.sigma * np.sqrt(self.T)
        )

    def call(self):
        C = norm.cdf(self.d1) * self.S - norm.cdf(self.d2) * self.X * np.exp(-self.r * self.T)
        return C

    def put(self):
        P = -norm.cdf(-self.d1) * self.S + norm.cdf(-self.d2) * self.X * np.exp(-self.r * self.T)
        return P


params = {"S": 50, "X": 100, "sigma": 0.25, "T": 1, "r": 0.05}
print(European_Option(**params).call())

现在,我想遍历具有多个值的字典并调用我的European_Option.call()方法。

params2={"S":[50,100], "X":[100,200],"sigma":0.25,"T":1,"r":0.05}
print(European_Option(**params2).call())

显然,这将导致错误。我该怎么办?

2 个答案:

答案 0 :(得分:1)

您可以使用itertools.product将所有 S 值与所有 X 值组合,例如:

s_list = [50, 100]
x_list = [100, 200]

for s, x in itertools.product(s_list, x_list):
    params = {"S": s, "X": x, "sigma": 0.25, "T": 1, "r": 0.05}
    print(European_Option(**params).call())

输出:

0.027352509369436673
1.922075153371893e-07
12.335998930368717
0.054705018738873346

答案 1 :(得分:1)

尝试:

params2={"S":np.array([50,100]), "X":np.array([100,200]),"sigma":0.25,"T":1,"r":0.05}
print(European_Option(**params2).call())

您不能将常规python list除以标量(您可以相乘,但这意味着其他的意思)。