Respostas:
O método numpy.show_config()
(ou numpy.__config__.show()
) gera informações sobre a ligação coletada no momento da construção. Minha saída é assim. Acho que significa que estou usando o BLAS / LAPACK que acompanha o Mac OS.
>>> import numpy as np
>>> np.show_config()
lapack_opt_info:
extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
extra_compile_args = ['-msse3']
define_macros = [('NO_ATLAS_INFO', 3)]
blas_opt_info:
extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
extra_compile_args = ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers']
define_macros = [('NO_ATLAS_INFO', 3)]
lapack_opt_info
é mostrado significa que numpy está vinculado com lapack?
numpy.show_config()
, provavelmente uma função pública da API, devido à ausência de sublinhados iniciais. Mas ele não está documentado on-line e não possui docstring, portanto, não é surpresa que seja tão difícil de encontrar. Espero que eles consertem isso.
O que você está procurando é o seguinte: informações do sistema
Eu compilei numpy / scipy com atlas e posso verificar isso com:
import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')
Verifique a documentação para mais comandos.
sysinfo.get_info('atlas')
não retornou nada para mim, mas sysinfo.get_info('blas')
retornou {'include_dirs': ['/usr/local/include', '/usr/include', '/opt/local/include', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include'], 'libraries': ['blas', 'blas'], 'library_dirs': ['/usr/lib']}
e sysinfo.get_info('lapack')
retornou {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
O que isso significa?
Como ele usa as versões carregadas dinamicamente, você pode fazer isso:
$ ldd anyoftheCmodules.so
onde anyoftheCmodules.so
poderia estar, por exemplo, o numpy/core/_dotblas.so
link para libblas.so
.
numpy/core/_dotblas.so
? (veja o comentário abaixo resposta das garras)
.so
arquivos lá. Basta pesquisar dentro do diretório NumPy (digamos, usando find /path/to/numpy -name "*.so"
). Um par daqueles ( _dotblas.so
, lapack_lite.so
sob um pré-compilado do Ubuntu, por exemplo) fazer uso de BLAS / LAPACK
_dotblas.so
já não existe no v1.10 numpy e mais recente , mas você pode verificar a ligação de multiarray.so
vez
numpy.__config__
objeto canônico em tempo de execução. (Veja a excelente resposta de davost .)
Você pode usar a ferramenta de dependência do carregador de links para examinar os componentes de gancho no nível C de sua compilação e verificar se eles têm dependências externas nos blas e lapack de sua escolha. Eu não estou perto de uma caixa linux no momento, mas em uma máquina OS X você pode fazer isso dentro do diretório site-packages que contém as instalações:
$ otool -L numpy/core/_dotblas.so
numpy/core/_dotblas.so:
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 268.0.1)
$ otool -L scipy/linalg/flapack.so
scipy/linalg/flapack.so (architecture i386):
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
/System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/flapack.so (architecture ppc):
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
$ otool -L scipy/linalg/fblas.so
scipy/linalg/fblas.so (architecture i386):
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
/System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0)
scipy/linalg/fblas.so (architecture ppc):
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
substitua ldd
no lugar de otool
um sistema gnu / Linux e você deverá obter as respostas necessárias.
numpy/core/_dotblas.so
? (ver comentário abaixo resposta Ricardos)
_dotblas.so
que é o wrapper de interface para qualquer blas que tenha sido usado para construir a distribuição. No Windows, ele será chamado _dotblas.pyd
, mas a função é a mesma.
_dotblas.so
só é construído se você estiver usando uma [atlas]
seção site.cfg
(e uma biblioteca BLAS habilitada para CBLAS). Portanto, você deve usá-lo, mesmo se não estiver usando o ATLAS (exceto quando estiver usando o Intel MKL, que possui uma seção dedicada).
_dotblas.so
já não existe no v1.10 numpy e mais recente , mas você pode verificar a ligação de multiarray.so
vez
Você pode exibir a ligação BLAS, LAPACK, MKL usando show_config()
:
import numpy as np
np.show_config()
O que para mim dá saída:
mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
('HAVE_CBLAS', None)]
?
Se você instalou o anaconda-navigator (em www.anaconda.com/anaconda/install/ para linux, Windows ou macOS) - blas, scipy e numpy serão instalados e você poderá vê-los clicando na guia ambientes no lado esquerdo da página inicial do navegador página (procure cada diretório em ordem alfa). A instalação do anaconda completo (em oposição ao miniconda ou aos pacotes individuais) cuidará da instalação de muitos dos pacotes essenciais necessários para a ciência de dados.
numpy.__config__
deve realmente ser uma API pública. No entanto, você vence esta rodada, davost .