Python 有没有一个程序化的方法来找到一个系列的开始和结束?
我有一个等间距的数字,如下所示:Python 有没有一个程序化的方法来找到一个系列的开始和结束?,python,math,linear-algebra,Python,Math,Linear Algebra,我有一个等间距的数字,如下所示: x 1 2 3 4 y 我不知道起始值和结束值x和yx可以大于y,反之亦然。我只知道中间值的值及其在列表中的顺序,即1的索引为1(x的索引为0),2的索引为2,等等 我也知道中间有多少个数字,所以在这个例子中是4 是否有一种方法可以表述这一点,以便我可以使用此信息找到x和y 编辑:更多信息: x != y x>y或y>x 给定请求的项目数量,程序使用x和y生成中间的数字。所以从x到y的线性插值,每个值使用相同的增量。如果我理解正确,你需要类似线性外推的东西。
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(n+1)-a(n)==a(n+2)-a(n+1)
对于所有n
如果a
是您的序列)v(2)
将计算所有元件的平均增益。请注意,这些值被转换为浮点。根据您目前所说的,还不清楚这些x
和y
与系列其余部分之间的关系,因此我认为,您需要进一步阐述这个问题。比如说,012340
是一个有效的序列吗?如果不是,是什么使它无效?顺便说一句,线性代数
标记在这里似乎不适用。@Zhenya这就是问题的关键吗?通过观察序列,我们可以推断在这个简单的例子中,x
应该是零,y
应该是5。我不知道我们如何制作一个程序来做到这一点,特别是对于更难的序列。然而,我想这就是他们要问的。好吧,我会添加更多的信息,但基本上中间的数字是用x和y计算的(不是由我计算的),从x
开始,到y
结束,根据中间所需的项目数量,以相等的增量。好吧,你的评论表明你已经解决了自己的问题。如果序列中的元素间隔相等,只需从第一个和最后一个已知值中减去/加上该空间即可。@GarethWebber:有无限多个序列,其中任意数量的特定元素重合。因此,为了“推断”缺失的值,需要一条规则来构造序列。或者,其他可能的问题可能是:给定序列中的一组数字,构造一个可能的规则——这个问题没有唯一的答案。因此,要求OP澄清具体的问题。