【发布时间】:2014-08-20 20:41:24
【问题描述】:
我必须在 Python 中将非常大的二维数组相乘大约 100 次。每个矩阵由32000x32000 个元素组成。
我正在使用np.dot(X,Y),但每次乘法都需要很长时间...下面是我的代码实例:
import numpy as np
X = None
for i in range(100)
multiplying = True
if X == None:
X = generate_large_2darray()
multiplying = False
else:
Y = generate_large_2darray()
if multiplying:
X = np.dot(X, Y)
还有其他更快的方法吗?
更新
这是显示 htop 界面的屏幕截图。我的 python 脚本只使用一个核心。此外,在 3h25m 之后,只进行了 4 次乘法运算。
更新 2
我尝试过执行:
import numpy.distutils.system_info as info
info.get_info('atlas')
但我收到了:
/home/francescof/.local/lib/python2.7/site-packages/numpy/distutils/system_info.py:564: UserWarning: Specified path /home/apy/atlas/lib is invalid. warnings.warn('Specified path %s is invalid.' % d) {}
所以,我认为它没有很好地配置。
反之亦然,关于blas,我只收到{},没有任何警告或错误。
【问题讨论】:
-
有没有什么办法可以将数组拆分成多个子数组并在多个线程或进程上运行?
-
“很长时间”是什么意思?
-
数据从何而来?您是否应该为此使用稀疏矩阵?
-
根据@ali_m 的问题,这一切都归结为您使用的是什么 BLAS。在 Haswell i7 上使用线程化英特尔 MKL 大约需要 5 分钟 您的里程可能会有所不同,但这应该是一个合理的下限。
-
好的,祝你好运 - 你可能会发现 this guide 很有帮助。
标签: python arrays performance numpy matrix