numpy/pandas矩阵乘法的多线程?

rkj*_*983 9 python multithreading numpy matrix pandas

我真的想知道如何在numpy/pandas上利用多核处理进行矩阵乘法.

我在想的是:

M = pd.DataFrame(...) # super high dimensional square matrix.
A = M.T.dot(M) 
Run Code Online (Sandbox Code Playgroud)

由于产品数量众多,这需要大量的处理时间,我认为使用多线程进行巨大的矩阵乘法是很简单的.所以,我在谷歌搜索,但我找不到如何在numpy/pandas上做到这一点.我是否需要使用一些python内置线程库手动编写多线程代码?

Fre*_*Foo 3

在 NumPy 中,可以通过 BLAS(基本线性代数子例程)的多线程实现来实现多线程矩阵乘法。你需要:

  1. 有这样一个BLAS实现;OpenBLAS、ATLAS 和 MKL 都包含多线程矩阵乘法。
  2. 编译 NumPy 以使用此类实现。
  3. 确保您要相乘的矩阵都具有dtypeoffloat32float64(并满足某些对齐限制;我建议使用 NumPy 1.7.1 或更高版本,其中这些限制已放宽)。

有一些注意事项:

  • 旧版本的 OpenBLAS 在使用 GCC 编译时,在使用 的程序中会遇到麻烦multiprocessing,其中包括大多数使用 的应用程序joblib。特别是,它们会挂起。原因是 GCC 中的错误(或缺乏功能)。补丁已提交,但尚未包含在主线源中
  • 您在典型 Linux 发行版中找到的 ATLAS 软件包可能会或可能不会编译为使用多线程。

至于 Pandas:我不确定它是如何进行点积的。转换为 NumPy 数组并返回以确保确定。