Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

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

I am solving a problem in which it is necessary to calculate the finite differences Δy. We have the original list of y values: [0.0000, 0.0016, 0.5875, 0.8087, 0.9509, 1.0000].

We need to get the differences:

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

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

As a result, I would like to have a list of lists with finite differences: [ [Δ1, Δ2, Δ3], [Δ4, Δ5], [Δ6] ].

I implemented a code where I get None values, and in each nested list they do not become one less – this is not what I want to have in the output:

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

Here is my code:

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)

>Solution :

Please, post the text in English! Also, provide the result you are expecting from that example.

However, if I understood correctly:

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))]

Here, result would be:

[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])]

However, if my_list is very large, you might want to do this, to save computations:

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

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading