Antworten:
Die Methode numpy.show_config()
(oder numpy.__config__.show()
) gibt Informationen zur Verknüpfung aus, die zum Zeitpunkt der Erstellung erfasst wurden. Meine Ausgabe sieht so aus. Ich denke, es bedeutet, dass ich das BLAS / LAPACK verwende, das mit Mac OS geliefert wird.
>>> 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
die gezeigt wird, bedeutet also, dass Numpy mit Lapack verbunden ist?
numpy.show_config()
, was wahrscheinlich eine öffentliche API-Funktion ist, da keine Startunterstriche vorhanden sind . Aber es ist nicht online dokumentiert und hat keine Dokumentzeichenfolge, daher ist es keine Überraschung, dass es so schwer zu finden ist. Hoffentlich werden sie das beheben.
Was Sie suchen, ist Folgendes: Systeminformationen
Ich habe numpy / scipy mit atlas zusammengestellt und kann dies überprüfen mit:
import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')
Weitere Befehle finden Sie in der Dokumentation.
sysinfo.get_info('atlas')
nichts für mich zurückgegeben, aber sysinfo.get_info('blas')
zurückgegeben {'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']}
und sysinfo.get_info('lapack')
zurückgegeben {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
Was bedeutet das?
Da die dynamisch geladenen Versionen verwendet werden, können Sie Folgendes tun:
$ ldd anyoftheCmodules.so
wo anyoftheCmodules.so
könnte zum Beispiel sein numpy/core/_dotblas.so
, welche Links zu libblas.so
.
numpy/core/_dotblas.so
? (siehe Kommentar unten Talonmies Antwort)
.so
Dateien darin sein. Suchen Sie einfach im NumPy-Verzeichnis (z. B. mit find /path/to/numpy -name "*.so"
). Ein paar von denen ( _dotblas.so
, lapack_lite.so
unter Ubuntu vorkompilierte ein, zum Beispiel) nutzt BLAS / LAPACK
_dotblas.so
existiert nicht mehr in numpy v1.10 und neuer , aber Sie können die Verknüpfung von multiarray.so
stattdessen überprüfen
numpy.__config__
Laufzeit auf das kanonische Objekt zugreifen . (Siehe Davosts ausgezeichnete Antwort .)
Sie können das Link Loader-Abhängigkeitstool verwenden, um die C-Level-Hook-Komponenten Ihres Builds zu überprüfen und festzustellen, ob sie externe Abhängigkeiten von Ihren Blas und dem Lapack Ihrer Wahl aufweisen. Ich bin momentan nicht in der Nähe einer Linux-Box, aber auf einem OS X-Computer können Sie dies im Verzeichnis site-packages tun, in dem sich die Installationen befinden:
$ 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)
Ersetzen Sie ldd
anstelle otool
eines Gnu / Linux-Systems und Sie sollten die Antworten erhalten, die Sie benötigen.
numpy/core/_dotblas.so
? (siehe Kommentar unter Ricardos Antwort)
_dotblas.so
Interface-Wrapper für alle Blas geben, die zum Erstellen der Distribution verwendet wurden. Unter Windows wird es aufgerufen _dotblas.pyd
, aber die Funktion ist dieselbe.
_dotblas.so
es nur erstellt wird, wenn Sie einen [atlas]
Abschnitt in site.cfg
(und eine CBLAS-fähige BLAS-Bibliothek) verwenden. Sie sollten dies also verwenden, auch wenn Sie ATLAS nicht verwenden (außer wenn Sie Intel MKL verwenden, das über einen eigenen Abschnitt verfügt).
_dotblas.so
existiert nicht mehr in numpy v1.10 und neuer , aber Sie können die Verknüpfung von multiarray.so
stattdessen überprüfen
Sie können die BLAS-, LAPACK- und MKL-Verknüpfung anzeigen mit show_config()
:
import numpy as np
np.show_config()
Was für mich Ausgabe gibt:
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)]
?
HAVE_CBLAS
definiert wird, aber keinen Wert hat (denken Sie an C :) #define HAVE_CBLAS
. Es wird kein Wert benötigt, da es nur als Flag verwendet wird. Ich würde es als interpretieren HAVE_CBLAS=True
. Wenn Sie kein CBLAS hätten, hätten Sie das Tupel dort überhaupt nicht.
Wenn Sie anaconda-navigator installiert haben (unter www.anaconda.com/anaconda/install/ für Linux, Windows oder macOS), werden blas, scipy und numpy installiert und Sie können sie anzeigen, indem Sie auf die Registerkarte Umgebungen auf der linken Seite der Navigator-Startseite klicken Seite (suchen Sie nach jedem Verzeichnis in Alpha-Reihenfolge). Durch die Installation der vollständigen Anaconda (im Gegensatz zu Miniconda oder einzelnen Paketen) werden viele der für die Datenwissenschaft erforderlichen wesentlichen Pakete installiert.
numpy.__config__
sollte es sich wirklich um eine öffentliche API handeln. Trotzdem gewinnst du diese Runde, Davost .