J'ai cet exemple de multiplication matrice par matrice à l'aide de tableaux numpy:
import numpy as np
m = np.array([[1,2,3],[4,5,6],[7,8,9]])
c = np.array([0,1,2])
m * c
array([[ 0, 2, 6],
[ 0, 5, 12],
[ 0, 8, 18]])
Comment puis-je faire la même chose si m est une matrice CSR clairsemée? Cela donne une incompatibilité de dimension:
sp.sparse.csr_matrix(m)*sp.sparse.csr_matrix(c)
Vous pouvez appeler la méthode multiply
de csr_matrix
pour effectuer une multiplication ponctuelle.
sparse.csr_matrix(m).multiply(sparse.csr_matrix(c)).todense()
# matrix([[ 0, 2, 6],
# [ 0, 5, 12],
# [ 0, 8, 18]], dtype=int64)
Lorsque m
et c
sont des tableaux numpy, alors m * c
n'est pas une "multiplication de matrice". Si vous pensez que c'est alors vous pouvez faire une erreur. Pour obtenir la multiplication de matrice, utilisez une classe de matrice, telle que matrix
de numpy ou les classes de matrice scipy.sparse.
La raison pour laquelle vous obtenez cet échec est que, du point de vue de la matrice, c
est une matrice 1x3:
c = np.matrix([0, 1, 2])
c.shape # (1,3)
c = sp.csc_matrix([0, 1, 2])
c.shape # (1,3)
Si ce que vous voulez est la multiplication de la matrice avec c
, vous devez utiliser la transposition.
c = np.matrix([0, 1, 2]).transpose()
c.shape # (3,1)
m = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
m.shape # (3,3)
m * c
# matrix([[ 8],
# [17],
# [26]])