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

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

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

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

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

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

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


person Aufwind    schedule 13.02.2012    source источник


Ответы (2)


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 является пустым массивом.

person Warren Weckesser    schedule 17.02.2012

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

index_of_maximum = scipy.argmax(R.getrow(i).data)
person Avaris    schedule 13.02.2012