python numpy polyfit函数

时间:2014-12-12 12:50:37

标签: python numpy

我是python的新手,到目前为止还没有在这个网站上找到答案。

我在循环中使用numpy.polyfit并得到如下错误并且不明白,因为当我在调试中运行代码时一切正常并且进入函数的数组的len是相同的:

  

错误运行时异常:TypeError:期望x和y具有相同的长度

我的代码如下:

    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

我做错了什么?

感谢您的期待。

2 个答案:

答案 0 :(得分:0)

我假设bbweekly_bb_lower。将while ( b <= 0 )更改为while ( b < 0 )。因为当b变为0时,weekly_bb_lower[-3:0]将返回一个空列表。 list[-n:0]应该是空的。

答案 1 :(得分:0)

您可以通过将最后三个元素移动到列表的开头来避免引用空列表:

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的解释是正确的。