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.