Python矩阵乘法:如何处理超大矩阵?
a = numpy.zeros((17770,5))
b = numpy.zeros((5,20000))
ma = numpy.matrix(a)
mb = numpy.matrix(b)
也就是说,ma.shape = (17770,5)
,mb.shape = (5,20000)
,这两个都是numpy.matrix
类型的矩阵。
我想计算ma*mb
,但是出现了错误信息"ValueError: array is too big"
。
这两个矩阵是不是太大,导致Python无法进行乘法运算呢?
顺便提一下,我是在python2.6.6/32位/3GB内存的环境下测试的。
1 个回答
5
我可以在我的电脑上计算 ma*mb
(我用的是 Python 2.7.1 |EPD 7.0-2 (64-bit)
,在64位的Ubuntu系统上)。
确保你在64位的操作系统上使用64位的Python,因为一个17770x20000的矩阵,里面存的是双精度浮点数,需要2.8GB的内存,这个内存量超过了大多数32位系统能处理的范围,或者说非常接近这个上限。
根据你的需求,使用单精度浮点数(numpy.float32
)也是一个选择。
最后,如果你的矩阵是稀疏的,或者有特定的结构,你可能想要利用这些特点来减少内存的使用。