gpt4 book ai didi

python - numpy:为大矩阵计算 x.T*x

转载 作者:太空狗 更新时间:2023-10-29 22:06:04 27 4
gpt4 key购买 nike

numpy 中,计算 x.T * x 的最有效方法是什么,其中 x 是一个大的 (200,000 x 1000) 密集 float32矩阵和.T是转置运算符?

为避免疑义,结果为 1000 x 1000。

编辑:在我原来的问题中,我说 np.dot(x.T, x) 需要几个小时。事实证明,我有一些 NaN 潜入了矩阵,出于某种原因,这完全破坏了 np.dot 的性能(关于原因的任何见解?)这现在已经解决了,但原来的问题仍然存在。

最佳答案

这可能不是您正在寻找的答案,但显着加快速度的一种方法是使用 GPU 而不是 CPU。如果您身边有一 block 相当强大的显卡,它随时都会胜过您的 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) 通过比较花了多长时间,但我觉得无聊...

您也可以尝试 PyCuda 或 PyOpenCL(如果您没有 nvidia 显卡),尽管我不知道它们对 numpy 的支持是否同样简单。

关于python - numpy:为大矩阵计算 x.T*x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4375617/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com