Andrew
Andrew

Reputation: 658

python numpy polyfit function

I'm new to python and haven't found an answer on this site so far.

I'm using numpy.polyfit in a loop and getting an error as below and don't understand as when I run the code in debug everything works fine and the len of arrays going into the function are the same:

Error Runtime exception: TypeError: expected x and y to have same length

My code is below:

    import numpy as np
    from collections import defaultdict 
    bb = [ 10, 11, 12, 22, 10, 11, 12, 11, 10, 11, 12, 22, 10, 11, 12, 11, 10, 11, 12, 22, 10, 11, 12, 11, 10, 11, 12, 22, 10, 11, 12, 11, 10 ]
    i = 0   
    b = -3
    bb_gradient = defaultdict(dict)
    while ( b <= 0 ):
        print i
        print len(range(3))
        print len(bb[b-3:b])
        bb_gradient[i][0], _ = np.polyfit( range(3), weekly_bb_lower[b-3:b], 1 )
        i += 1
        b += 1

What am I doing wrong?

Thanks in anticipation.

Upvotes: 2

Views: 5424

Answers (2)

Geoffrey
Geoffrey

Reputation: 94

You can avoid referencing an empty list by moving the last three elements to the start of your list:

import numpy as np
from collections import defaultdict 
bb = [ 10, 11, 12, 22, 10, 11, 12, 11, 10, 11, 12, 22, 10, 11, 12, 11, 10, 11, 12, 22, 10, 11, 12, 11, 10, 11, 12, 22, 10, 11, 12, 11, 10 ]
bb = bb[-3:] + bb[:-3] # moves the last three elements of the list to the start prior to looping
bb_gradient = defaultdict(dict)
for i in range(3):
    bb_gradient[i][0], _ = np.polyfit( range(3) , bb[i:i+3], 1 )

Prashanth's explanation is correct.

Upvotes: 1

Prashanth
Prashanth

Reputation: 1332

I am assuming bb is weekly_bb_lower. Change while ( b <= 0 ) to while ( b < 0 ). because when b becomes 0, weekly_bb_lower[-3:0] will return an empty list. a list[-n:0] is supposed to be empty.

Upvotes: 1

Related Questions