Как создать массив данных с дельтой?
Есть конечный массив arr в котором лежат 3 массива всегда равной длины
Как создать массив, в котором будет лежать разница между числами?
Например, если сейчас a = [3, 1, 5, 7, 6, 7, 8, 10, 3, 3],
то в итоге в arr[0] должно быть [-2,4,2,-1,1,1,2,-7,0]
Может в numpy есть какой-то простой способ сделать это одной строчкой или какой-то другой оригинальный способ ?
Данных может быть много и скорость вычислений очень важна.
import numpy as np
......
a = [3, 1, 5, 7, 6, 7, 8, 10, 3, 3]
b = [11, 15, 17, 86, 11, 67, 31, 56, 3, 11]
c = [12.1, 98.2, 31.6, 24.7, 12.1, 34.1, 1.8, 65.1, 22.9, 31.6]
arr = np.array([a, b, c])
arr_delta = arr ?
Ответы (3 шт):
Возможно, вам нужно это?:
import numpy as np
a = [3, 1, 5, 7, 6, 7, 8, 10, 3, 3]
print(np.diff(np.array(a)))
[-2 4 2 -1 1 1 2 -7 0]
UPDATE
import numpy as np
a = [3, 1, 5, 7, 6, 7, 8, 10, 3, 3]
b = [11, 15, 17, 86, 11, 67, 31, 56, 3, 11]
c = [12.1, 98.2, 31.6, 24.7, 12.1, 34.1, 1.8, 65.1, 22.9, 31.6]
arr_delta = [np.diff(np.array(x)).tolist() for x in (a, b, c)]
print(arr_delta)
Получим:
[[-2, 4, 2, -1, 1, 1, 2, -7, 0], [4, 2, 69, -75, 56, -36, 25, -53, 8], [86.10000000000001, -66.6, -6.900000000000002, -12.6, 22.0, -32.300000000000004, 63.3, -42.199999999999996, 8.700000000000003]]
Соответственно, arr_delta[0] будет:
[-2, 4, 2, -1, 1, 1, 2, -7, 0]
Либо, еще короче:
arr = np.array([a, b, c])
arr_delta = [np.diff(x).tolist() for x in arr]
print(arr_delta)
Но в этом случае обратите внимание на приведение типов.
import numpy as np
a = [3, 1, 5, 7, 6, 7, 8, 10, 3, 3]
b = [11, 15, 17, 86, 11, 67, 31, 56, 3, 11]
c = [12.1, 98.2, 31.6, 24.7, 12.1, 34.1, 1.8, 65.1, 22.9, 31.6]
arr = np.array([a, b, c])
res = np.array(
[arr[0][:-1]-arr[0][1:],
arr[1][:-1]-arr[1][1:],
arr[2][:-1]-arr[2][1:]]
)
[[ 2. -4. -2. 1. -1. -1. -2. 7. 0. ]
[ -4. -2. -69. 75. -56. 36. -25. 53. -8. ]
[-86.1 66.6 6.9 12.6 -22. 32.3 -63.3 42.2 -8.7]]
numpy.diff считает то что нужно (называется конечная разность). Передайте параметр axis чтобы указать вдоль какой оси считать разности:
import numpy as np
a = [3, 1, 5, 7, 6, 7, 8, 10, 3, 3]
b = [11, 15, 17, 86, 11, 67, 31, 56, 3, 11]
c = [12.1, 98.2, 31.6, 24.7, 12.1, 34.1, 1.8, 65.1, 22.9, 31.6]
arr = np.array([a, b, c])
arr_delta = np.diff(arr, axis=1)
print(arr_delta)
[[ -2. 4. 2. -1. 1. 1. 2. -7. 0. ] [ 4. 2. 69. -75. 56. -36. 25. -53. 8. ] [ 86.1 -66.6 -6.9 -12.6 22. -32.3 63.3 -42.2 8.7]]