for
и Нумба
Я хочу использовать цикл for
, но ускорить его с помощью Numba
- Да: это
for
петля и не очень красивая
- Нет: это не медленно, потому что я использую Numba (-:
Импорт
import pandas as pd
import numpy as np
from numba import njit
Определить функцию
@njit
def f(x):
y = []
z = []
for a in x:
if not y:
y.append(a)
z.append(0)
else:
if (y[-1] == 0) ^ (a == 0):
y.append(a)
z.append(z[-1] + 1)
else:
y[-1] = min(y[-1], a)
z.append(z[-1])
return np.array(y)[np.array(z)]
Использовать функцию
pd.Series(f(x.to_numpy()), x.index)
0 1
1 1
2 1
3 1
4 0
5 0
6 0
7 0
8 3
9 3
10 3
11 3
12 3
dtype: int64
itertools.groupby
Кредит на номер 6 для ассистента.
from itertools import groupby, repeat
def repeat_min(x):
for _, group in groupby(x, key=bool):
group = list(group)
minval = min(group)
yield from repeat(minval, len(group))
pd.Series([*repeat_min(x)], x.index)
0 1
1 1
2 1
3 1
4 0
5 0
6 0
7 0
8 3
9 3
10 3
11 3
12 3
dtype: int64