我是Python的初学者,我知道在这种情况下,SetVel[i+4]
超出了范围。但我无法集中精力纠正它。任何帮助都将是惊人的。我的代码是:
OutSmooth = []
IndexOut = []
IndSmooth = []
length = len(SetVel)
for i in range(2, length-3):
diffnext = (SetVel[i+4])- (SetVel[i+3])
diffprev = (SetVel[i+1])-(SetVel[i])
diff1 = SetVel[i+2]-SetVel[i+1]
diff2 = SetVel[i+3]-SetVel[i+2]
if diff1 < 1.5*diffprev or diff2 < 1.5*diffnext:
IndSmooth.append(SetVel.index(SetVel[i+2]))
else:
OutSmooth.append(SetVel[i+2])
PS:对于那些问这到底是什么的人:这是我在非导数曲线平滑的尝试。在我的主程序中,我有一个基于NumPy的导数曲线平滑机制,但我这样做是为了我的理解和作为备份。谢谢
编辑:
break
条件工作后删除错误,但代码只运行该块一次。只追加一个索引
使用索引结果而不是命名变量,高度正则的数学表达式可能更清晰
Python非常喜欢使用迭代器
一旦您习惯了列出理解,
zip()
我认为生成一个diff列表可能会更清楚一个常见的编程目标是参数化、自动化,所以这里的输入是您想要的差异数,其余的是自动的
^{pr2}$您正在使用
i
进行迭代,它在length-3
之前最大化,在length-4
(实际上等于len(SetVel)-4
)。在按照这个逻辑,如果}。在
i = len(SetVel)-4
,那么SetVel[i+4]
等于SetVel[len(SetVel)-4+4]
,或者{所有这些只是为了告诉您错误的原因-您正在寻找一个长度本身的索引。这不太好,因为索引从0开始,而不是1。可能的最高索引是长度的-1。在
换言之,替换
与
^{pr2}$最后,如果您
break
循环结束时,无条件地,您只能得到它的一次迭代(只有一个结果),所以不要这样做相关问题 更多 >
编程相关推荐