Учитывая разреженную матрицуR типа scipy.sparse.coo_matrix формы 1.000.000 x 70.000, я понял, что
row_maximum = max(R.getrow(i).data)
даст мне максимальное значение i-й строки.
Теперь мне нужен индекс, соответствующий значению row_maximum.
Есть идеи, как этого добиться?
Спасибо за любой совет заранее!
Ответ 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)