我是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
我做错了什么?
感谢您的期待。
答案 0 :(得分:0)
我假设bb
是weekly_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的解释是正确的。