Reputation: 25
guys I have a problem with my python code.
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
This is my class and I call it like this:
BasketOption(name="basket", typeO="call",numbersU=2, numbersA=np.array([[2., 2.]]), maturity=1.,strike=110)
I don't have the good results so I searched on debug and I saw that numbersA
did not take the values 2.
and 2.
in the array when I call it, it takes this:
ndarray: [ 3.68777431e+180 1.04146313e-152]
I don't know why it take these values. Thanks.
Upvotes: 0
Views: 43
Reputation: 25
Thank you guys I found my mistake it was here: numbersA=np.array([[2., 2.]]) I put 2 hooks, just need one.
Upvotes: 0
Reputation: 353059
def getnumbersA(self,numbersU):
self.numbersA=np.empty(self.numbersU)
return self.numbersA
np.empty
return an "empty" array -- i.e. with interior values unassigned -- for performance reasons.
I'm not sure what you're hoping getnumbersA
will do, but right now every time you call getnumbersA
you replace numbersA
with something which is likely to look like this (arbitrarily choosing an argument):
In [36]: np.empty([1,2])
Out[36]: array([[ 6.93278890e-310, 1.14700699e-316]])
which doesn't seem likely to be what you want.
Upvotes: 1