Точечный продукт строки и столбца в матрице равен 1x1 csr_matrix
. Как я могу эффективно преобразовать это в скаляр? Сейчас я использую sum
. M
ниже квадратная матрица:Преобразование 1 × 1 разреженной матрицы в скалярный
dot_product_result = csr_matrix.sum(M.getrow(3).dot(M.getcol(5)))
Here's the lil_matrix
documentation.
UPDATE Когда я пытаюсь решение ниже, я получаю эту ошибку:
raise NotImplementedError('adding a nonzero scalar to a '
NotImplementedError: adding a nonzero scalar to a sparse matrix is not supported
Это фактический код, я использую :
e = rating - Q.getrow(mid).dot(P.getcol(uid))[0]
iteration_error += e
Я инициализирую iteration_error
до 0.0.
я преобразовал 'Q.getrow (середина)' в 'Q [середина ,:] ', как вы сказали. теперь я получаю это предупреждение: «SparseEfficiencyWarning: индексирование в lil_matrix с несколькими индексами происходит медленно. Предварительная конвертация в CSC или CSR заранее эффективна. Должен ли я использовать 'getrow' вместо этого? –
Вы должны измерить, какой из них быстрее. –
Yowza, getrow примерно в 20 раз быстрее индексации! Вот тест, который я написал: http://lpaste.net/100041 –