Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Учитывая матрицу типа `scipy.sparse.coo_matrix`, как определить индекс и значение максимума каждой строки?

Автор вопроса: AufwindОтветов: 2

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

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

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

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

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

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

pythonscipymaxmatrixsparse-matrix

Ответы

Ответ 1 · рейтинг 8 · Warren Weckesser

getrow(i) возвращает матрицу CSR 1 x n, которая имеет атрибут indices, который дает индексы строк соответствующих значений в атрибуте data. (Мы знаем, что фигура 1 x n, поэтому нам не нужно иметь дело с атрибутом 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 является пустым массивом.

Ответ 2 · рейтинг -1 · Avaris

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

index_of_maximum = scipy.argmax(R.getrow(i).data)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы