Respuestas:
El método numpy.show_config()
(o numpy.__config__.show()
) genera información sobre la vinculación recopilada en el momento de la compilación. Mi salida se ve así. Creo que significa que estoy usando BLAS / LAPACK que viene con 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
se muestra significa que numpy está vinculado con lapack?
numpy.show_config()
, que probablemente sea una función API pública en virtud de la ausencia de guiones bajos iniciales. Pero no está documentado en línea y no tiene una cadena de documentación, por lo que no es sorprendente que sea tan difícil de encontrar. Esperemos que arreglen eso.
Lo que está buscando es esto: información del sistema
Compilé numpy / scipy con atlas y puedo verificar esto con:
import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')
Consulte la documentación para más comandos.
sysinfo.get_info('atlas')
no me devolvió nada, pero sysinfo.get_info('blas')
regresó {'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']}
y sysinfo.get_info('lapack')
regresó {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
¿Qué significa?
Como utiliza las versiones cargadas dinámicamente, puede hacer esto:
$ ldd anyoftheCmodules.so
dónde anyoftheCmodules.so
podría estar, por ejemplo numpy/core/_dotblas.so
, a qué enlaces libblas.so
.
numpy/core/_dotblas.so
? (ver comentario debajo de la respuesta de talonmies)
.so
archivos allí. Simplemente busque dentro del directorio NumPy (digamos, usando find /path/to/numpy -name "*.so"
). Un par de ellos ( _dotblas.so
, lapack_lite.so
bajo un precompilado de Ubuntu, por ejemplo) hacen uso de BLAS / LAPACK
_dotblas.so
ya no existe en v1.10 numpy y más reciente , pero se puede comprobar la vinculación de multiarray.so
lugar
numpy.__config__
objeto canónico en tiempo de ejecución. (Ver la excelente respuesta de davost .)
Puede usar la herramienta de dependencia del cargador de enlaces para ver los componentes de enlace de nivel C de su compilación y ver si tienen dependencias externas en su blas y paquete de opciones. No estoy cerca de una caja de Linux en este momento, pero en una máquina con OS X puede hacer esto dentro del directorio de paquetes del sitio que contiene las instalaciones:
$ 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)
sustituya ldd
en lugar de otool
en un sistema gnu / Linux y debería obtener las respuestas que necesita.
numpy/core/_dotblas.so
? (ver comentario debajo de la respuesta de Ricardos)
_dotblas.so
envoltura de interfaz para cualquier blas que se haya utilizado para construir la distribución. En Windows se llamará _dotblas.pyd
, pero la función es la misma.
_dotblas.so
solo se crea si está utilizando una [atlas]
sección en site.cfg
(y una biblioteca BLAS habilitada para CBLAS). Por lo tanto, debe usar eso, incluso si no está usando ATLAS (excepto cuando está usando Intel MKL, que tiene una sección dedicada).
_dotblas.so
ya no existe en v1.10 numpy y más reciente , pero se puede comprobar la vinculación de multiarray.so
lugar
Puede mostrar enlaces BLAS, LAPACK, MKL usando show_config()
:
import numpy as np
np.show_config()
Lo que para mí da salida:
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)]
?
Si instaló anaconda-navigator (en www.anaconda.com/anaconda/install/ para linux, Windows o macOS), se instalarán blas, scipy y numpy y podrá verlos haciendo clic en la pestaña de entornos en el lado izquierdo de la página de inicio del navegador página (busque cada directorio en orden alfabético). La instalación de anaconda completa (a diferencia de miniconda o paquetes individuales) se encargará de instalar muchos de los paquetes esenciales necesarios para la ciencia de datos.
numpy.__config__
realmente debería ser una API pública. No obstante, ganas esta ronda, davost .