2017-02-16 1 views
0

私のPythonコードに問題があります。Python、クラスを呼び出すときにクラスパラメータの配列に正しい値がありません

class BasketOption: 

    def __init__(self,name,markets,typeO,numbersU,numbersA,maturity,strike): 
     self.name = name 
     self.markets = markets 
     self.typeO=typeO 
     self.numbersU=numbersU 
     self.numbersA=numbersA 
     self.maturity = maturity 
     self.strike = strike 
     self.cache = DateCache() 

    def getnumbersA(self,numbersU): 
     self.numbersA=np.empty(self.numbersU) 
     return self.numbersA 

    def getdates(self): 
     return [self.maturity] 

    def getmarkets(self): 
     return [self.markets] 

    def getweight(self): 
     compt=0 
     totalweight=0 
     weight=np.empty(self.numbersU,dtype=float) 
     for i in range(self.numbersU): 
      totalweight+=self.getnumbersA(self.numbersU)[i] 
     total=np.array([totalweight]*self.numbersU) 
     weight=self.getnumbersA(self.numbersU)/total 
     return weight 

    def getsum(self,date): 
     prices=0 
     for i in range(self.numbersU): 
      prices+= self.markets.getspot(date,i)*self.getweight()[i] 
     return prices 

    @timecached 
    def getcf(self,date): 
     if date == self.maturity: 
      #FIXME: l'option peut aussi porter sur un forward, introduire 
      # plutôt la notion de produit. 
      if self.typeO=="call": 
       return np.maximum(self.getsum(date) - self.strike, 0.) 
     else: 
      return 0 

これは私のクラスであり、私はこのようにそれを呼び出す:私はデバッグで検索し、私はnumbersAは値2.を取らなかったことを見た私は良い結果を持っていない

BasketOption(name="basket", typeO="call",numbersU=2, numbersA=np.array([[2., 2.]]), maturity=1.,strike=110) 

と私はそれを呼び出す、アレイ内の2.、これをとります

ndarray: [ 3.68777431e+180 1.04146313e-152] 

それは、これらの値を取る理由を私は知りません。ありがとう。

+0

デフォルト値を持たない 'markets'引数がありませんか? –

+0

いいえそれがかかります私はあなたにコードのこの部分を見せていないことを確信しています –

+0

初期化後単純なprint()を入れてみてください –

答えて

1
def getnumbersA(self,numbersU): 
    self.numbersA=np.empty(self.numbersU) 
    return self.numbersA 

np.emptyパフォーマンス上の理由から、「空の」配列、つまり内部値が割り当てられていない配列を返します。

私は今あなたが(任意の引数を選択する)このようになりそうである何かでnumbersAを置き換えるgetnumbersA呼び出すたびにあなたがgetnumbersAが行うことを望んでいるかわからないんだけど、:

In [36]: np.empty([1,2]) 
Out[36]: array([[ 6.93278890e-310, 1.14700699e-316]]) 

これはあなたが望むものとは思われません。

+0

私はエラーがあったので、これをしなければならない:ValueError:オペランドをシェイプ(500000、)(2、)と共にブロードキャストできない –

+0

self.markets.getspot (500000、)私はwが2つの異なる次元の配列を乗算することはできないが、通常はself.ge tweight()[i]配列の1つの要素にアクセスできるはずですか? –

0

ありがとうございました私の間違いはここにありました:numbersA = np.array([[2.、2.]])2つのフックを入れました。

関連する問題