Учитывая матрицу типа `scipy.sparse.coo_matrix`, как определить индекс и значение максимума каждой строки? - PullRequest
4 голосов
/ 14 февраля 2012

Учитывая разреженную матрицу R типа scipy.sparse.coo_matrix формы 1.000.000 x 70.000 Я понял, что

row_maximum = max(R.getrow(i).data)

даст мне максимальное значение i-й строки.

Теперь мне нужен индекс, соответствующий значению row_maximum.

Есть идеи, как этого добиться?

Спасибо за любые советы заранее!

Ответы [ 2 ]

8 голосов
/ 18 февраля 2012

getrow(i) возвращает матрицу CSR 1 xn, которая имеет атрибут indices, который дает индексы строк соответствующих значений в атрибуте data.(Мы знаем, что форма 1 xn, поэтому нам не нужно иметь дело с атрибутом indptr.) Так что это будет работать:

row = R.getrow(i)
max_index = row.indices[row.data.argmax()] if row.nnz else 0

Мы должны иметь дело со случаем, когда row.nnzравно 0 отдельно, потому что row.data.argmax() вызовет исключение, если row.data - пустой массив.

0 голосов
/ 14 февраля 2012

используйте numpy.argmax (или scipy.argmax, что одно и то же)

index_of_maximum = scipy.argmax(R.getrow(i).data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...