Вы можете выполнить эту операцию с помощью at
метода np.add
:
import numpy as np
np.random.seed(0)
N = 100
R = np.random.randint(0, N, [N, 3])
M = np.random.randn(N) * 15
newarray = np.zeros([N, N, N])
np.add.at(newarray, (R[:, 0], R[:, 1], R[:, 2]), M)
В этом случае, если R
имеетВ повторяющейся строке соответствующее значение в newarray
будет суммой всех соответствующих значений в M
.
РЕДАКТИРОВАТЬ: чтобы взять среднее значение вместо суммы для повторяющихся элементов, вы можете сделать что-то вроде этого:
import numpy as np
np.random.seed(0)
N = 100
R = np.random.randint(0, N, [N, 3])
M = np.random.randn(N) * 15
newarray = np.zeros([N, N, N])
np.add.at(newarray, (R[:, 0], R[:, 1], R[:, 2]), M)
newarray_count = np.zeros([N, N, N])
np.add.at(newarray_count, (R[:, 0], R[:, 1], R[:, 2]), 1)
m = newarray_count > 1
newarray[m] /= newarray_count[m]