dies die Antwort nicht sein kann, nach dem Sie suchen, sondern eine Möglichkeit, es wesentlich zu beschleunigen ist ein gpu statt Ihrer CPU zu verwenden. Wenn Sie eine anständig starke Grafikkarte haben, wird sie Ihre CPU jeden Tag übertreffen, auch wenn Ihr System sehr gut abgestimmt ist.
Für eine gute Integration mit numpy könnten Sie theano verwenden (wenn Ihre Grafikkarte von nvidia stammt). Die Berechnung im folgenden Code läuft für mich in wenigen Sekunden (obwohl ich habe eine sehr leistungsstarke Grafikkarte):
$ THEANO_FLAGS=device=gpu0 python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import theano
Using gpu device 0: GeForce GTX 480
>>> from theano import tensor as T
>>> import numpy
>>> x = numpy.ones((200000, 1000), dtype=numpy.float32)
>>> m = T.matrix()
>>> mTm = T.dot(m.T, m)
>>> f = theano.function([m], mTm)
>>> f(x)
array([[ 200000., 200000., 200000., ..., 200000., 200000., 200000.],
[ 200000., 200000., 200000., ..., 200000., 200000., 200000.],
[ 200000., 200000., 200000., ..., 200000., 200000., 200000.],
...,
[ 200000., 200000., 200000., ..., 200000., 200000., 200000.],
[ 200000., 200000., 200000., ..., 200000., 200000., 200000.],
[ 200000., 200000., 200000., ..., 200000., 200000., 200000.]], dtype=float32)
>>> r = f(x)
>>> r.shape
(1000, 1000)
Ich wollte warten, um herauszufinden, wie lange >>> numpy.dot(x.T, x)
durch Vergleich nahm, aber ich Langeweile ...
Sie können PyCuda oder PyOpenCL auch versuchen (wenn Sie nicht eine nvidia Grafikkarte haben), obwohl ich nicht weiß, ob ihre numpy Unterstützung so direkt ist.
Es ist mir gerade eingefallen, dass bei Matrizen dieser große Speicher eine Einschränkung bei vielen Grafikkarten sein wird. Etwas, auf das man achten sollte. –
obwohl dies in der Tat eine nette Alternative ist, ist es sicherlich nicht normal, dass seine CPU-Multiplikation so viel Zeit braucht – steabert
Vielen Dank für den Zeiger. Das ist sehr interessant und lohnt sich sicherlich. – NPE