Risposte:
Il metodo numpy.show_config()
(o numpy.__config__.show()
) genera informazioni sul collegamento raccolte al momento della creazione. La mia uscita è simile a questa. Penso che significhi che sto usando BLAS / LAPACK fornito 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
viene mostrato significa che intorpidimento è collegato con il pacco?
numpy.show_config()
, che è probabilmente una funzione API pubblica in virtù dell'assenza di sottolineature iniziali. Ma non è documentato online e non ha docstring, quindi non sorprende che sia così difficile da trovare. Spero che lo risolvano.
Quello che stai cercando è questo: informazioni di sistema
Ho compilato numpy / scipy con atlante e posso verificarlo con:
import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')
Controlla la documentazione per ulteriori comandi.
sysinfo.get_info('atlas')
non ha restituito nulla per me, ma ha sysinfo.get_info('blas')
restituito {'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')
restituito {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
Cosa significa?
Poiché utilizza le versioni caricate dinamicamente, puoi semplicemente fare questo:
$ ldd anyoftheCmodules.so
dove anyoftheCmodules.so
potrebbe essere, ad esempio numpy/core/_dotblas.so
, che si collega a libblas.so
.
numpy/core/_dotblas.so
? (vedi commento sotto la risposta delle talonmie)
.so
file. Basta cercare all'interno della directory NumPy (diciamo, usando find /path/to/numpy -name "*.so"
). Un paio di quelli ( _dotblas.so
, lapack_lite.so
sotto un unico precompilato di Ubuntu, per esempio) fanno uso di BLAS / LAPACK
_dotblas.so
non esiste più in numpy v1.10 e versioni successive , ma è possibile controllare il collegamento di multiarray.so
invece
numpy.__config__
Invece , vuoi davvero solo accedere all'oggetto canonico in fase di esecuzione. (Vedi la risposta eccellente di David .)
Puoi usare lo strumento di dipendenza del caricatore di link per esaminare i componenti hook di livello C della tua build e vedere se hanno dipendenze esterne sul tuo blas e lapack di scelta. Non sono vicino a una scatola di Linux in questo momento, ma su una macchina OS X puoi farlo all'interno della directory dei pacchetti del sito che contiene le installazioni:
$ 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)
sostituire ldd
al posto di otool
un sistema gnu / Linux e dovresti ottenere le risposte di cui hai bisogno.
numpy/core/_dotblas.so
? (vedi commento sotto la risposta di Ricardos)
_dotblas.so
che è il wrapper di interfaccia per qualsiasi blas sia stato usato per costruire la distribuzione. Su Windows verrà chiamato _dotblas.pyd
, ma la funzione è la stessa.
_dotblas.so
sia costruito solo se stai usando una [atlas]
sezione in site.cfg
(e una libreria BLAS abilitata per CBLAS). Quindi, dovresti usarlo, anche se non stai usando ATLAS (tranne quando stai usando Intel MKL, che ha una sezione dedicata).
_dotblas.so
non esiste più in numpy v1.10 e versioni successive , ma è possibile controllare il collegamento di multiarray.so
invece
È possibile visualizzare i collegamenti BLAS, LAPACK, MKL usando show_config()
:
import numpy as np
np.show_config()
Che per me dà output:
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 hai installato anaconda-navigator (su www.anaconda.com/anaconda/install/ per linux, Windows o macOS) - blas, scipy e numpy verranno installati e potrai vederli facendo clic sulla scheda degli ambienti sul lato sinistro della home page di navigator pagina (cercare ciascuna directory in ordine alfabetico). L'installazione di anaconda completa (al contrario di miniconda o singoli pacchetti) si occuperà dell'installazione di molti dei pacchetti essenziali necessari per la scienza dei dati.
numpy.__config__
dovrebbe essere davvero un'API pubblica. Tuttavia, vinci questo round, David .