Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 了解Numpy是否使用/使用哪个BLAS库_Python_C++_Macos_Numpy_Blas - Fatal编程技术网

Python 了解Numpy是否使用/使用哪个BLAS库

Python 了解Numpy是否使用/使用哪个BLAS库,python,c++,macos,numpy,blas,Python,C++,Macos,Numpy,Blas,我在不同的环境(MacOS、Ubuntu、RedHat)中使用numpy和scipy。 通常,我使用可用的软件包管理器(例如mac ports、apt、yum)安装numpy 但是,如果不手动编译Numpy,如何确保它使用BLAS库?使用mac端口,ATLAS作为依赖项安装。然而,我不确定它是否真的被使用了。当我执行一个简单的基准时, NoPy.dot()/Cuth>函数需要的时间是使用EGIN C++库计算的点积的2倍。我不确定这是否是一个合理的结果 致以最良好的祝愿, Apo您想检查nump

我在不同的环境(MacOS、Ubuntu、RedHat)中使用numpy和scipy。 通常,我使用可用的软件包管理器(例如mac ports、apt、yum)安装numpy

但是,如果不手动编译Numpy,如何确保它使用BLAS库?使用mac端口,ATLAS作为依赖项安装。然而,我不确定它是否真的被使用了。当我执行一个简单的基准时,<代码> NoPy.dot()/Cuth>函数需要的时间是使用EGIN C++库计算的点积的2倍。我不确定这是否是一个合理的结果

致以最良好的祝愿,
Apo

您想检查
numpy.show\u config()
以查看配置了哪些库

最新的
mkl
应该显示
libraries=['mkl\u rt']
,在此之前,它应该包含几个
mkl\u
库。另见

numpy.show_config()只是告诉我,在我的Debian Linux上,信息不可用

但是/usr/lib/python3/dist packages/scipy/lib有一个子目录用于blas,它可以告诉您想要什么。在子目录测试中有几个BLAS测试程序

希望这能有所帮助。

numpy.show\u config()
并不总能提供可靠的信息。例如,如果我在Ubuntu14.04上安装了python numpy,那么
np.show\u config()
的输出如下所示:

blas\u信息:
库=['blas']
库_dirs=['/usr/lib']
语言=f77
lapack_信息:
库=['lapack']
库_dirs=['/usr/lib']
语言=f77
atlas_线程_信息:
无法使用的
blas_opt_信息:
库=['blas']
库_dirs=['/usr/lib']
语言=f77
定义_宏=[('NO_ATLAS_INFO',1)]
atlas_blas_线程信息:
无法使用的
openblas_信息:
无法使用的
lapack_opt_信息:
库=['lapack','blas']
库_dirs=['/usr/lib']
语言=f77
定义_宏=[('NO_ATLAS_INFO',1)]
...
看起来numpy正在使用标准的CBLAS库。然而,我知道numpy正在使用OpenBLAS,这是我通过
libopenblas dev
包安装的


检查*nix最明确的方法是找出运行时numpy链接所针对的共享库(我没有Mac,但我认为您可以使用
otool-L
代替
ldd

  • 对于早于v1.10的numpy版本:

    ~$ ldd /<path_to_site-packages>/numpy/core/_dotblas.so
    

查看我通过apt get安装的numpy版本:

~$ ldd /usr/lib/python2.7/dist-packages/numpy/core/_dotblas.so 
    linux-vdso.so.1 =>  (0x00007fff12db8000)
    libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fce7b028000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fce7ac60000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fce7a958000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fce7a738000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fce7ca40000)
/usr/lib/libblas.so.3
实际上是一系列符号链接的开始。如果我使用
readlink-e
跟随他们到达最终目标,我会看到他们指向我的OpenBLAS共享库:

~$ readlink -e /usr/lib/libblas.so.3
/usr/lib/openblas-base/libblas.so.3

如果
ldd//numpy/core/multiarray,我将不胜感激。因此
在答案中的位置更高。看起来在numpy 1.16中,multiarray被重新组织了。我必须运行lddnumpy/core/\u multiarray\u umath.cpython-36m-x86\u 64-linux-gnu。所以
~$ readlink -e /usr/lib/libblas.so.3
/usr/lib/openblas-base/libblas.so.3