Оператор умножения для scipy разреженных матриц

Меня немного смущает поведение оператора умножения *, когда задействованы нечеткие разреженные матрицы. Кажется, что оператор реализует матричное умножение, а не покомпонентное умножение, как это было бы с множеством массивов.

Какой-то код, чтобы проверить это:

from scipy.sparse import lil_matrix
A = lil_matrix(-numpy.eye(2))
b = lil_matrix(numpy.ones((2,2)))
print (A * B).toarray()

приводит к:

[[-1. -1.]
 [-1. -1.]]

документация модуля scipy.sparse на самом деле не вдаваться в подробности об этом, и мне интересно, есть ли где-нибудь четкая спецификация поведения умножения?

Кроме того, существуют ли какие-то четко определенные правила для оператора умножения с scipy разреженными матрицами и numpy-матрицами или массивами?


person silvado    schedule 06.12.2012    source источник
comment
Я также ищу некоторую документацию по этому поводу.   -  person Integral    schedule 24.09.2018


Ответы (2)


Документация действительно скудная. Если вы ищете покомпонентное умножение, вы можете использовать A.multiply(b), где b может быть элементом, вектором или матрицей:

https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.csr_matrix.multiply.html

person Femkemilene    schedule 23.06.2017

Да, во всех случаях это умножение матриц.

person pv.    schedule 06.12.2012