Відповіді:
Метод numpy.show_config()
(або numpy.__config__.show()
) виводить інформацію про зв'язок, зібрану під час збирання. Мій результат виглядає приблизно так. Я думаю, це означає, що я використовую BLAS / LAPACK, який постачається з 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
показаний, означає, що нумею пов’язано з лапаком?
numpy.show_config()
, що, ймовірно, є функцією загальнодоступного API через відсутність початкових підкреслень. Але це не задокументовано в Інтернеті і не має докстрингу, тому не дивно, що його так важко знайти. Сподіваємось, вони це виправлять.
Що ви шукаєте: це системна інформація
Я склав numpy / scipy з атласу, і я можу перевірити це за допомогою:
import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')
Перевірте документацію на наявність додаткових команд.
sysinfo.get_info('atlas')
нічого не повернув мені, але sysinfo.get_info('blas')
повернувся {'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']}
і sysinfo.get_info('lapack')
повернувся {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
Що це означає?
Оскільки він використовує динамічно завантажені версії, ви можете просто зробити це:
$ ldd anyoftheCmodules.so
де anyoftheCmodules.so
могло б бути, наприклад numpy/core/_dotblas.so
, яке посилання на libblas.so
.
numpy/core/_dotblas.so
? (див. коментар нижче відповіді талонії)
.so
файлів. Просто шукайте всередині каталогу NumPy (скажімо, використовуючи find /path/to/numpy -name "*.so"
). Кілька з них (наприклад _dotblas.so
, lapack_lite.so
за попередньою
_dotblas.so
більше немає в numpy v1.10 та новіших версіях , але ви можете перевірити зв’язок multiarray.so
замість цього
numpy.__config__
об'єкта під час виконання. (Дивіться відмінну відповідь Давоста .)
Ви можете скористатись інструментом залежності завантажувача посилань, щоб подивитися на компоненти гака на рівні С на вашій збірці та побачити, чи мають вони зовнішні залежності від ваших благ та лапак вибору. Наразі я не поруч з вікном linux, але на машині OS X ви можете це зробити всередині каталогу сайтів-пакунків, який містить установки:
$ 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)
замість ldd
замість системи otool
gnu / Linux, і ви повинні отримати відповіді, які вам потрібні.
numpy/core/_dotblas.so
? (див. коментар нижче відповіді Рікардоса)
_dotblas.so
оболонка інтерфейсу для тих, що використовувались для побудови дистрибутива. У Windows це буде називатися _dotblas.pyd
, але функція однакова.
_dotblas.so
він побудований лише у тому випадку, якщо ви використовуєте [atlas]
розділ у site.cfg
(та бібліотеці BLAS з підтримкою CBLAS). Отже, ви повинні використовувати це, навіть якщо ви не використовуєте ATLAS (за винятком випадків, коли ви використовуєте Intel MKL, у якому є виділений розділ).
_dotblas.so
більше немає в numpy v1.10 та новіших версіях , але ви можете перевірити зв’язок multiarray.so
замість цього
Ви можете відобразити зв’язок BLAS, LAPACK, MKL, використовуючи show_config()
:
import numpy as np
np.show_config()
Що для мене дає результат:
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
що визначається, але не має значення (подумайте C #define HAVE_CBLAS
:). Це значення не потребує, оскільки воно використовується лише як прапор. Я б інтерпретував це як HAVE_CBLAS=True
. Якби у вас не було CBLAS, ви б там не мали кортежу.
Якщо ви встановили анаконда-навігатор (за адресою www.anaconda.com/anaconda/install/ для Linux, Windows чи macOS) - бланки, scipy та numpy будуть встановлені, і ви можете їх побачити, натиснувши вкладку середовища ліворуч від домашньої сторінки навігатора. сторінка (шукайте кожен каталог у альфа-порядку). Встановлення повної анаконди (на відміну від мініконди або окремих пакетів) допоможе встановити багато важливих пакетів, необхідних для наукових даних.
numpy.__config__
він справді повинен бути публічним API. Тим не менш, ви виграєте цей раунд, Давосто .