Возможно, это не тот ответ, который вы ищете, но один из способов значительно ускорить его - это использовать графический процессор вместо своего центрального процессора. Если у вас есть достаточно мощная видеокарта, она превзойдет ваш процессор в любой день, даже если ваша система очень хорошо настроена.
Для хорошей интеграции с numpy, вы можете использовать theano (если ваша видеокарта сделана nvidia). Расчет в следующем коде выполняется для меня через пару секунд (хотя у меня очень мощная видеокарта):
$ 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)
Я собирался подождать, чтобы узнать, сколько времени потребовалось >>> numpy.dot(x.T, x)
для сравнения, но мне стало скучно ...
Вы также можете попробовать PyCuda или PyOpenCL (если у вас нет видеокарты nvidia), хотя я не знаю, насколько проста их поддержка: