[PYTHON] scipy.sparse ist nicht für den Betrieb innerer Produkte optimiert

import timeit
import numpy as np
import scipy as sp

def getSparse(length, size, todense = False):
    array = np.random.random_integers(0, size - 1, length)
    response =  scipy.sparse.csr_matrix(([1]*len(array), array,range(len(array) + 1)), shape=(len(array),size), dtype = array.dtype)
    return response.todense() if todense else response

def testDense():
	x = np.dot(np.random.rand(300000).reshape(300, 1000), getSparse(1000,300, True))

def testSparse():
	x = np.dot(np.random.rand(300000).reshape(300, 1000), getSparse(1000,300, False))

print(timeit.timeit(testDense, setup = 'import __main__', number = 1))
# 0.08102297782897949
print(timeit.timeit(testSparse, setup = 'import __main__', number = 1))
# 30.572995901107788

Ich hatte erwartet, dass die Punktoperation mit der spärlichen Matrix schneller sein würde, aber sie war schrecklich langsam. Theoretisch sollte es nicht seltsam sein, wenn es schneller wird, aber es scheint, dass die Implementierung es nicht unterstützt.

Nebenbei möchte ich wirklich die Werte einer bestimmten Dimension des ndarray aggregieren. Beispiel: Verarbeitung, bei der die Daten geändert werden, deren Dimension (x Datum speichern) in (Region x Datum) ist. In meinem Anwendungsfall war es in Ordnung, normalerweise mit der dichten Matrix zu berechnen, aber wenn mehr Daten hinzugefügt werden, scheint diese Eigenschaft ein Problem zu sein.

Recommended Posts

scipy.sparse ist nicht für den Betrieb innerer Produkte optimiert
Windows Subsystem für Linux wird nicht angezeigt