Как суммировать строки массива 2d в соответствии с разделом - PullRequest
0 голосов
/ 22 мая 2018

Мне интересно, что является самым быстрым способом, учитывая массив NumPy в форме (n, m) и массив Numpy в форме (p), описывающий раздел в диапазоне от 0 до n (например, один такой раздел для n = 6будет: [0, 2, 4], что означает, что индексы разделены как (0, 1), (2,3), (4,5)), чтобы возвратить массив массивов формы (p, m)строки, соответствующие каждому разделу, суммируются вместе.

Например,

[[0,1,1,1],
 [2,0,1,1],
 [0,0,0,1],
 [5,1,0,0]]

при условии, что раздел [0,1] должен вернуть

[[0,1,1,1],
 [7,1,1,2]]

У меня уже есть решение, которое строит матрицу

[[1,0,0,0],
 [0,1,1,1]]

и оставил умножить исходную матрицу на это, чтобы получить желаемую матрицу, что, я думаю, должно быть довольно быстрым, но я думаю, что может быть что-то более быстрое, включающее что-то похожее на numpy.reduceat (https://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.reduceat.html) с использованиемМассив разделов. Любая помощь?

Подождите ... Я просто прочитал документацию Reduat, и вы можете буквально просто сделать np.add.reduceat(matrix, partition, axis=0). Я помню, что вы не могли этого сделать. Я думаю, это потому, что для моего приложенияМне нужно было сделать это для разреженной матрицы. Так что кто-нибудь может посоветовать, как это сделать, когда входной двумерный массив numpy находится в разреженном формате?

...