Вычисление суммы по группе на разреженном массиве - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть разреженный массив, подобный следующему:

import scipy
my_sparse_array = scipy.sparse.random(2000, 1000000, density=0.01, format='csr')

И для каждой строки у меня есть группа: groups = ["A", "A", "B", "C",«D»] * 400

Исходя из этих групп, я хочу получить сумму каждого столбца и вывести массив со строками, которые теперь являются общей суммой групп, и каждый столбец остается неизменным.

Как это можно эффективно сделать с разреженной матрицей?

Спасибо, Джек

РЕДАКТИРОВАТЬ:

Одним из способов сделать это может быть следующее:

import numpy as np
import pandas as pd

results = {}
group_set = set(groups)
for group in group_set:
    indices = np.where(np.array(groups) == group)[0]
    results[group] = my_sparse_array[indices, :].sum(axis=0).A1

final_result = pd.DataFrame(results)

Однако мне было интересно, существует ли более эффективный способ, кроме циклического прохождения групп и подмножеств.

...