Можно также сделать это с Пандами:
Используя 2356-долгий массив:
import numpy as np
xs = np.array([...])
Используя scipy:
from scipy.ndimage.interpolation import shift
%timeit shift(xs, 1, cval=np.nan)
# 956 µs ± 77.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Используя Панд:
import pandas as pd
%timeit pd.Series(xs).shift(1).values
# 377 µs ± 9.42 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
В этом примере, использование Панд было приблизительно в ~8 раз быстрее, чем Scipy
Если Вы хотите остроту от numpy и не слишком обеспокоены производительностью, попробуйте:
np.sum(np.diag(the_array,1),0)[:-1]
Объяснение: np.diag(the_array,1)
создает матрицу с Вашим массивом, одноразовым диагональ, np.sum(...,0)
суммы матрица по столбцам, и ...[:-1]
берет элементы, которые соответствовали бы размеру исходного массива. При проигрывании вокруг с 1
и :-1
, поскольку параметры могут дать Вам, переключает различные направления на нижний регистр.