Я пытаюсь векторизовать очень простую операцию, но не могу понять, как.
Учитывая очень большой числовой вектор (более 1М позиций) и другой массив размера n с заданным набором.позиций, я хотел бы получить вектор размером n с элементами, представляющими собой средние значения первого вектора, как указано вторым
a = np.array([1,2,3,4,5,6,7])
b = np.array([[0,1],[2],[3,5],[4,6]])
c = [1.5,3,5,6]
Мне нужно многократно повторять эту операцию, чтобы производительностьявляется проблемой.
Решение Vanilla Python:
import numpy as np
import time
a = np.array([1,2,3,4,5,6,7])
b = np.array([[0,1],[2],[3,5],[4,6]])
begin = time.time()
for i in range(100000):
c = []
for d in b:
c.append(np.mean(a[d]))
print(time.time() - begin, c)
# 3.7529971599578857 [1.5, 3.0, 5.0, 6.0]