sum = np.zeros((3,3))
m = np.array([[0,1,1],[1,2,0],[0,0,1]])
arr = np.array([[0],[1],[2]])
time = np.array([[10,20,30],[40,50,60],[70,80,90]])
И я хочу сделать это так:
sum[arr,m[:,[0]]] += time[:,[0]]
sum[arr,m[:,[1]]] += time[:,[1]]
sum[arr,m[:,[2]]] += time[:,[2]]
>>> sum
array([[ 10., 50., 0.],
[ 60., 40., 50.],
[150., 90., 0.]])
Как я могу сделать это без цикла for?
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.
np.add.at(sum, (arr,m), time) ? Пожалуйста, избегайте затенения встроенных функций.

Вот простой подход:
sum = np.zeros((3,3))
vals = np.c_[np.indices(m.shape)[0].flatten(), m.flatten()].T
_, idx, inverse = np.unique( np.char.add(*vals.astype('str')),True, True)
sum[tuple(vals[:,idx])] = np.bincount(np.arange(idx.size)[inverse], time.flatten())
out[]
array([[ 10., 50., 0.],
[ 60., 40., 50.],
[150., 90., 0.]])
IMO, этот код слишком сложен и его трудно поддерживать. Комментарии будут полезны. Также вы пропустили, что arr представлен как переменная.
Все, что вы делаете, можно выполнить с помощью других статистических инструментов, таких как pandas.pivot_table. Просто создайте фрейм данных, а все остальное вы сделаете одной командой.