我真的想知道如何在numpy / pandas上使用多核处理进行矩阵乘法。
我正在尝试的是:
M = pd.DataFrame(...) # super high dimensional square matrix.
A = M.T.dot(M)
由于产品总数很多,这需要大量的处理时间,而且我认为使用多线程进行巨大的矩阵乘法是很简单的。所以,我在谷歌搜索,但我找不到如何在numpy / pandas上做到这一点。我是否需要使用一些python内置线程库手动编写多线程代码?
答案 0 :(得分:3)
在NumPy中,多线程矩阵乘法可以通过基本线性代数子程序BLAS的多线程实现来实现。你需要:
dtype
float32
或float64
(并且符合某些对齐限制;我建议使用NumPy 1.7.1或更高版本这些已经放松了。)一些警告适用:
multiprocessing
的程序中遇到麻烦,其中包括使用joblib
的大多数应用程序。特别是,他们会挂起。原因是GCC中存在错误(或缺少功能)。已提交patch但尚未包含在主要来源中。至于熊猫:我不确定它是如何做点产品的。转换为NumPy数组并返回以确定。
答案 1 :(得分:1)
首先,我还建议转换为颠簸阵列并使用numpys点功能。如果您有权访问目前或多或少是最快实现的MKL构建,则应尝试设置环境变量OMP_NUM_THREADS
。这应该激活系统的其他核心。在我的MAC上它似乎正常工作。另外,我会尝试使用似乎比np.einsum
np.dot
但请注意!如果你已经编译了一个使用OpenMP进行并行化的多线程库(比如MKL),你必须考虑,所有苹果系统上的“默认gcc”不是gcc,它是Clang / LLVM而且Clang无法用目前OpenMP支持,除了你使用仍在实验的OpenMP主干。因此,您必须安装intel编译器或任何其他支持OpenMP
的编译器