Как получить минимальное число из 5 предыдущих чисел вектора?
Есть вектор с числами:
import numpy as np
arr = np.array([18, 4, 15, 14, 6, 7, 11, 12, 8, 5, 7, 0, 12, 0, 2, 18])
Ожидаемый результат:
[nan nan nan nan 4. 4. 6. 6. 6. 5. 5. 0. 0. 0. 0. 0.]
Решение с циклом:
period = 5
lowest = np.full_like(arr, np.nan, dtype=float)
for i in range(period-1, len(arr)):
lowest[i] = np.min(arr[i-(period-1) : i+1])
Можно ли получить векторизированным способом, без цикла?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
решение в Pandas - воспользуйтесь Series.rolling(...):
import pandas as pd
s = pd.Series(arr)
res = s.rolling(5).min()
результат:
In [316]: res
Out[316]:
0 NaN
1 NaN
2 NaN
3 NaN
4 4.0
5 4.0
6 6.0
7 6.0
8 6.0
9 5.0
10 5.0
11 0.0
12 0.0
13 0.0
14 0.0
15 0.0
dtype: float64
или в виде numpy.NDArray:
In [317]: res.to_numpy()
Out[317]:
array([nan, nan, nan, nan, 4., 4., 6., 6., 6., 5., 5., 0., 0., 0., 0., 0.])