Python 如何除以列表Y中的变化?

Python 如何除以列表Y中的变化?,python,list,math,equation,Python,List,Math,Equation,此问题的解决方案是解决增量y,请参见**中问题的底部** 我正在为许多不同的线性回归方程编写代码。我有两个带有x和y值的列表。我的一个等式创建了一个新的列表w。列表w的方程式为(w=1/Δy^2),其中y为列表。我以前使用过需要列表的等式,但从未使用过列表中的更改 我有w=[1/(deltay)**2(x,y)]但是当我打印时,我得到w[False]。所以我不认为我做得对,但是我不知道 列表y中的每个数据点需要有5%的不确定度。现在我只关心w和y中的不确定性。这个w函数是其他东西所需要的 总之,

此问题的解决方案是解决增量y,请参见**中问题的底部**

我正在为许多不同的线性回归方程编写代码。我有两个带有x和y值的列表。我的一个等式创建了一个新的列表w。列表w的方程式为(w=1/Δy^2),其中y为列表。我以前使用过需要列表的等式,但从未使用过列表中的更改

我有
w=[1/(deltay)**2(x,y)]
但是当我打印时,我得到
w[False]
。所以我不认为我做得对,但是我不知道

列表y中的每个数据点需要有5%的不确定度。现在我只关心w和y中的不确定性。这个w函数是其他东西所需要的

总之,我如何对等式(w=1/Δy^2)进行编码,其中δy是一个列表,w是一个列表,谢谢


**好的,我已经取得了一些进展。我想我现在知道怎么解决这个问题了。我有一个y值列表。每个y值的不确定度为5%。所以我需要一个新的列表增量,它是旧列表y乘以0.05的时间。所以我在写这个
deltay=[(i*0.05)for i in zip(y)]
但是我得到了错误TypeError:不能将序列乘以'float'类型的非int***

我假设您的
deltay
变量是一个变量,否则您的代码将引发一个异常,因此既然您使用了numpy.array,您可以使用:

如果您的
deltay
不是numpy.array(如上次更新所示),您可以使用列表理解来计算
w

deltay = [ i * 0.05 for i in y]
w = [1/x**2 for x in deltay]

原则上,您想要的是滑动窗口上的迭代器。关于这一点,已经有好几篇文章可以发表了

我们将利用Daniel DiPaolo建议的方法:

from itertools import islice

def window(seq, n=2):
    "Returns a sliding window (of width n) over data from the iterable"
    "   s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...                   "
    it = iter(seq)
    result = tuple(islice(it, n))
    if len(result) == n:
        yield result
    for elem in it:
        result = result[1:] + (elem,)
        yield result
现在,获得更改很容易:

xs = [1, 3, 4, 7, 10, 14]
ys = [3, 1, 2, 9, 13, -1]

# if you need the slope
w = [1/d**2 
     for d in 
         map(lambda pnts: (pnts[1][1]-pnts[0][1])/(pnts[1][0]-pnts[0][0]),  
             window(zip(xs, ys), 2))
    ]

# if you just need the change in y
w = [1/d**2 
     for d in 
         map(lambda y: y[1] - y[0], window(ys, 2))
    ]
要回答您的编辑问题,请执行以下操作:


好的,我已经取得了一些进展。我想我现在知道怎么解决这个问题了。我 有一个y值列表。每个y值的不确定度为5%。所以我 需要一个新的列表增量,它是旧列表y乘以0.05的时间。我也是 写这个deltay=[(i*0.05)代表zip(y)]但是我得到了 错误类型错误:不能将序列与“float”类型的非int相乘**


您应该对y中的i使用
[(i*0.05)]
。如果您使用
zip(y)
您迭代的所有条目都将是元组。

发布一个示例输入和相应的预期输出。您想获得斜率(分段)还是仅将
y
y[i]
更改为
y[i+1]
?我不太了解
x
这个角色。好吧,我已经取得了一些进展。我想我现在知道怎么解决这个问题了。我只需要在0.05之前生成一个y次列表。因为这将作为我的列表delta y。所以我写这个'w=[1/(deltay)**2 in-zip(x,y)]`但是我得到了错误TypeError:不能用'float'类型的非整数乘以序列。请发布
deltay
的值,你可以使用print
xs = [1, 3, 4, 7, 10, 14]
ys = [3, 1, 2, 9, 13, -1]

# if you need the slope
w = [1/d**2 
     for d in 
         map(lambda pnts: (pnts[1][1]-pnts[0][1])/(pnts[1][0]-pnts[0][0]),  
             window(zip(xs, ys), 2))
    ]

# if you just need the change in y
w = [1/d**2 
     for d in 
         map(lambda y: y[1] - y[0], window(ys, 2))
    ]