Да кажем, че имам два масива с еднакви размери: индексен масив idx
и масив със стойности val
:
import numpy as np
idx = np.array([[10, 10, 13],
[13, 10, 18],
[10, 16, 18]])
np.random.seed(42)
val = np.round(np.random.uniform(0, 100, 9).reshape((3, 3)), 1)
print(repr(val))
# array([[30.5, 9.8, 68.4],
# [44. , 12.2, 49.5],
# [ 3.4, 90.9, 25.9]])
Как мога ефективно да приложа функция, т.е. mean
върху масива от стойности, като използвам уникалните селекции от индексния масив?
Ето моят най-добър груб опит с for
-цикъл с очаквания резултат:
{i: val[idx == i].mean() for i in np.unique(idx)}
# {10: 13.975, 13: 56.2, 16: 90.9, 18: 37.7}
Въпреки че това изглежда добре в този пример, отнема над 40 секунди в случай от реалния свят с 6000 уникални индекса върху масив с над 5 милиона елемента. Това е твърде дълго и търся по-ефективен метод.