hicham kortbi
hicham kortbi

Reputation: 25

Python, array in class parameters don't have the right value when I call th class

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

Answers (2)

hicham kortbi
hicham kortbi

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

DSM
DSM

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

Related Questions