我有一个等间距的数字,如下所示:
x 1 2 3 4 y
我不知道开始值和结束值x
和y
. x
可以大于y
,反之亦然。我所知道的只是中间值的值及其在列表中的顺序,即 1
的索引是1
(x
的索引是0
(,2
的索引是2
,依此类推。
我也知道中间有多少个数字,所以在这种情况下是 4。
有没有办法制定这个,以便我可以使用这些信息找到x
和y
?
编辑: 更多信息:
x != y
x > y
或y > x
该程序在给定请求的项目数的情况下,使用 x
和 y
生成介于两者之间的数字。因此,从 x 到 y 的线性插值,对每个值使用相同的增量。
如果我理解正确的话,你想要线性外推之类的东西。试试这个:
def get_xy(values):
assert(len(values) >= 2)
#(v1) use the first gain
m = values[1] - values[0]
#(v2) calculate the mean-gain
# (avg of v[i+1]-v[i])
m = sum(float(x-y) for x,y in zip(values[1:], values[:-2])) / (len(values) - 1)
return (values[0] - 1*m, values[-1] + 1*m)
print get_xy([ 1, 2, 3, 4])
print get_xy([-1,-2,-3,-4])
x,y = get_xy([ 1, 2, 3, 4])
print x,y # if you are unfamilar with tuples
v(1)
更胖,但只有在每个元素都按相同的值递增/递减时才起作用(如果a
是你的序列,则a(n+1) - a(n) == a(n+2) - a(n+1)
所有n
(。 v(2)
将计算所有元素的平均增益。请注意,这些值被强制转换为浮点数。