如何在 Python 中生成有限差的嵌套列表?

How to generate a nested list of finite differences in Python?

我正在解决一个需要计算有限差分 Δy 的问题。我们有原始的 y 值列表:[0.0000, 0.0016, 0.5875, 0.8087, 0.9509, 1.0000].

我们需要求出差异:

из последующего значения вычесть предыдущее (например: 0.0016-0.000; 0.5875-0.0016 и так далее) - на выходе нам нужен список, где значений на одно меньше; продолжим вычитание с рассчитанными разностями - на выходе снова список, где значений еще на одно меньше. Так идем до тех пор, пока не останется одно значение, из которого вычитать нечего.

因此,我想要一个具有有限差分的列表列表:[ [Δ1, Δ2, Δ3], [Δ4, Δ5], [Δ6] ]

我实现了一个代码,其中我获得了 None 个值,并且在每个嵌套列表中它们都没有减少 - 这不是我想要的输出:

[[None, None, None, None, None],
 [None, None, None, None, None],
 [None, None, None, None, None]]

这是我的代码:

my_list = [0.0000, 0.0016, 0.5875, 0.8087, 0.9509, 1.0000]
n=3
diff_list = []
data = [[diff_list.append(y-x) for x, y in zip(my_list[0::], my_list[1::])] for i in range(0, n)]
print(data)

拜托,post英文正文!另外,请提供您期望从该示例中获得的结果。

不过,如果我理解正确的话:

import numpy as np

my_list = [0.0000, 0.0016, 0.5875, 0.8087, 0.9509, 1.0000]

result = [np.diff(my_list, n=d) for d in range(1, len(my_list))]

在这里,result 将是:

[array([0.0016, 0.5859, 0.2212, 0.1422, 0.0491]),
 array([ 0.5843, -0.3647, -0.079 , -0.0931]),
 array([-0.949 ,  0.2857, -0.0141]),
 array([ 1.2347, -0.2998]),
 array([-1.5345])]

但是,如果 my_list 非常大,您可能希望这样做以节省计算量:

result = []
for d in range(1, len(my_list)):
    result.append(np.diff(my_list if d == 1 else result[-1]))