これは、あなたが探している答えではないかもしれないが、かなりそれをスピードアップするための一つの方法ではなく、あなたのCPUのGPUを使用することです。非常に強力なグラフィックスカードがあれば、システムが非常にうまく調整されていても、いつでもあなたのCPUより優れたパフォーマンスを発揮します。
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)
長く見つけるために待つつもりだったが、私退屈しました...
あなたはnumpyのサポートが簡単かどうかわかりませんが、PyCudaまたはPyOpenCL(nvidiaグラフィックスカードを持っていない場合)を試すこともできます。
行列では、この大きなメモリは多くのグラフィックスカードの制約になると私は思いました。気をつけるべきこと。 –
これは実際には素晴らしい選択肢ですが、CPUの乗算には多くの時間がかかりますが、確かに正常ではありません。 – steabert
ポインタに感謝します。これは非常に面白く、確かに調べる価値があります。 – NPE