2017-02-16 5 views
0

Jungs Ich habe ein Problem mit meinem Python-Code.Python, Array in Klassen-Parameter haben nicht den richtigen Wert, wenn ich die Klasse anrufen

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 

Dies ist meine Klasse und ich es so nennen:

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

Ich habe nicht die guten Ergebnisse, damit ich auf debug gesucht und ich sah, dass numbersA nicht die Werte nehmen haben 2. und 2. im Array, wenn ich es nennen, nimmt es das:

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

ich weiß nicht, warum es diese Werte nehmen. Vielen Dank.

+0

Gibt es ein fehlendes 'markets' Argument, das keinen Standardwert hat? –

+0

Nein es dauert es Ich bin mir sicher, dass ich Ihnen diesen Teil des Codes nicht gezeigt habe –

+0

Versuchen Sie, einen einfachen Ausdruck() nach der Initialisierung –

Antwort

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

np.empty return ein "leer" array - das heißt mit Innen Werten nicht belegt - aus Leistungsgründen.

Ich bin mir nicht sicher, was Sie hoffen, getnumbersA tun wird, aber jetzt jedes Mal, wenn Sie anrufen getnumbersAnumbersA mit etwas zu ersetzen, die wie folgt aussehen wahrscheinlich ist (willkürlich ein Argument Auswahl):

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

was scheint nicht zu sein, was Sie wollen.

+0

Es muss sein, aber ich tat dies, weil ich einen Fehler hatte: ValueError: Operanden konnten nicht zusammen mit shapes ausgestrahlt werden (500000,) (2,) –

+0

self.markets.getspot (Datum, i) hat Form (500000,) Ich weiß, dass w nicht zwei Arrays unterschiedlicher Dimensionen multiplizieren kann, aber normalerweise mit self.ge tweight() [i] Ich sollte Zugang zu einem Element des Arrays haben? –

0

Vielen Dank Leute ich fand meinen Fehler es war hier: numbersA = np.array ([[2., 2.]]) Ich lege 2 Haken, brauche nur einen.

Verwandte Themen