Scipy разреженная матрица - PullRequest
0 голосов
/ 28 февраля 2019

Недавно я пытался сделать следующее (эффективно)

  1. Считать разреженную (csr) матрицу

  2. Выбрать подмножествострок

  3. Построить другую матрицу (все нули)

  4. Заполнить 3. подмножеством, полученным в 2.

Я могу почти достигнуть этого следующим образом:

input_matrix = scipy.io.loadmat(some_matrix)

random_indices = np.random.choice(input_matrix.shape[1], num_samples, replace=False)

second_matrix = sp.dok_matrix(input_matrix.shape)

## this takes up too much memory!
second_matrix[random_indices] = input_matrix[random_indices]

Как сделать это более эффективно?Я не хотел бы вызывать .todense () в любой момент, так как это также взорвалось бы в памяти.Интуитивно понятно, что нужно уметь маскировать часть матрицы?В numpy (плотном) я бы просто заполнил остаток нулями, но для матриц csr я не уверен, так ли это.

Спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Я протестировал форматы .dok и .csr, но единственный формат, который не приводит к космическому взрыву:

second_matrix[random_indices] = input_matrix.tolil()[random_indices]

Следовательно, матрица .lil.

Предложениеhpaulj также имеет смысл, но мне еще предстоит протестировать его (lil отлично работает для моей задачи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...