python - 为什么在将ubuntu从12.04升级到14.04后使用python的numpy进行矩阵乘法变得如此缓慢?

标签 python numpy ubuntu-12.04 matrix-multiplication ubuntu-14.04

我以前有 Ubuntu 12.04,最近全新安装了 Ubuntu 14.04。我正在研究的内容涉及大矩阵(~2000 X 2000)的乘法,为此我使用了 numpy。我遇到的问题是现在计算的时间延长了 10-15 倍。

从 Ubuntu 12.04 到 14.04 意味着从 Python 2.7.3 到 2.7.6 以及从 numpy 1.6.1 到 1.8.1。但是,我认为这个问题可能与 numpy 链接到的线性代数库有关。而不是 libblas.so.3gfliblapack.so.3gf,我只能找到 libblas.so.3liblapack。所以.3

我还安装了 libopenblas 和 libatlas:

$ sudo apt-get install libopenblas-base libatlas3-base

并尝试了它们,但减速并没有改变。所以,我的问题是:

  1. 有和没有“gf”的包裹有什么区别?
  2. 这是否可能导致矩阵乘法变慢?
  3. 如果是这样,我如何返回到 libblas.so.3gf 和 liblapack.so.3gf?它们似乎在 Ubuntu 14.04 中停产了。

非常感谢!

最佳答案

wim 是正确的,因为问题可能是由 numpy 链接到较慢的 BLAS 库(例如引用 CBLAS 库而不是 ATLAS)引起的。

您可以通过在 numpy 的已编译共享库之一上调用 ldd 实用程序来检查正在链接哪个 BLAS 库。

例如,如果您使用 apt-get 在标准位置安装了 numpy:

~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so
        ...
        libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f01f0188000)
        ...

此输出告诉我 numpy 链接到 /usr/lib/libblas.so.3。这通常是引用 CBLAS 库的符号链接(symbolic link),速度非常慢。

您可以按照 wim 的建议,删除通过 apt-get 安装的 numpy 版本,然后使用 pip 或直接下载源代码自行构建。但是,我强烈不鼓励您使用 sudo pip install ... 在系统范围内安装 Python 模块。这是一个不好养成的习惯,因为您冒着破坏系统范围 Python 环境中的依赖关系的风险。

使用 pip install --user ... 安装到您的 ~/.local/ 目录中或者更好的是,安装到一个完全独立 virtualenv .

另一种选择是使用 update-alternatives强制您的系统范围内的 numpy 链接到不同的 BLAS 库。我写了一个 previous answer here显示了如何执行此操作。

关于python - 为什么在将ubuntu从12.04升级到14.04后使用python的numpy进行矩阵乘法变得如此缓慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25320684/

相关文章:

linux - 'cat/proc/swaps' 什么都不返回

python - 打印出 ValueError 的实际错误消息

python - 氢原子的薛定谔方程 : why is numpy displaying a wrong solution while scipy isn't?

python - 当数据文件只有一行时,numpy genfromtxt collapse recarray

python - 使用 IRLS 了解 scipy 的最小二乘函数

crash - 如何读取 Ubuntu 12.04 上的崩溃文件?

linux - 拔掉主机上的以太网后无法访问 Horizo​​n

python - 获取类型错误 : expected string or bytes-like object

python - 如果涉及 Inf,为什么稀疏矩阵的矩阵乘法与密集矩阵的乘法不同?

python - 使用部分日期时间索引连接数据框