|
12345678910111213141516171819202122 |
- import numpy as np
-
-
- def dfill(a):
- n = a.size
- b = np.concatenate([[0], np.where(a[:-1] != a[1:])[0] + 1, [n]])
- return np.arange(n)[b[:-1]].repeat(np.diff(b))
-
-
- def argunsort(s):
- n = s.size
- u = np.empty(n, dtype=np.int64)
- u[s] = np.arange(n)
- return u
-
-
- def cumcount(a):
- n = a.size
- s = a.argsort(kind='mergesort')
- i = argunsort(s)
- b = a[s]
- return (np.arange(n) - dfill(b))[i]
|