Ich habe den folgenden Fall erstellt, um eindimensionale Sparse-Matrix-Multiplikation vs numpy Arrays zu testen.Scipy dünn Matrix-Multiplikation viel langsamer als numpy Array
from scipy.sparse import csc_matrix
sp = csc_matrix((1, 36710))
sp[0,4162] = 0.2335
sp[0,21274] = 0.1367
sp[0,27322] = 0.261
sp[0,27451] = 0.9266
%timeit sp.dot(sp.T)
arr = sp.toarray()[0]
%timeit arr.dot(arr)
Das Ergebnis ist wie folgt:
267 µs ± 6.58 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
9.9 µs ± 230 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Auch sie sind sowohl langsamer als eine Ebene dict Einträge speichert und eine for-Schleife für die Multiplikation (~ 1 us).
Das Ergebnis ist das gleiche, nachdem verschiedene Arten von spärlichen Matrix, einschließlich CSR/COO versucht. Warum ist die Multiplikation mit spärlicher Matrix ~ 30 mal langsamer als die Multiplikation mit dichten Arrays? Liegt es daran, dass die Matrix zu spärlich ist?
Es ist eine noch schnellere Lösung: 'sp.data.dot (sp.data)', '3.3ns pro loop' –
@NilsWerner ich wahrscheinlich brauchen Um das Beispiel ein wenig zu ändern, muss ich die Multiplikation auf verschiedene Matrizen anwenden. In diesem Fall gibt Ihre Lösung eine falsche Antwort. –
Ich nehme an, dass es nicht viel zu gewinnen gibt, wenn ein spärlicher Vektor verwendet wird. Die Situation ändert sich wirklich, wenn Sie dünn besetzte Matrizen verwenden (nxm, n, m> 1). – Hannebambel