Ответы:
Метод 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 связан с lapack?
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
в предварительно скомпилированном Ubuntu) используют BLAS / LAPACK
_dotblas.so
больше не существует в numpy v1.10 и новее , но multiarray.so
вместо этого вы можете проверить связь
numpy.__config__
Вместо этого вы действительно хотите получить доступ к каноническому объекту во время выполнения. (См. Отличный ответ Давоста .)
Вы можете использовать инструмент зависимости загрузчика ссылок, чтобы посмотреть на компоненты хуков C уровня вашей сборки и увидеть, есть ли у них внешние зависимости от выбранных вами blas и lapack. Я сейчас не рядом с Linux-боксом, но на машине с OS X вы можете сделать это внутри каталога site-packages, в котором находятся установки:
$ 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
оболочка интерфейса для любого blas, использованного для создания дистрибутива. В окнах он будет вызываться _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, у вас вообще не было бы кортежа.
Если вы установили anaconda-navigator (на www.anaconda.com/anaconda/install/ для linux, Windows или macOS) - будут установлены blas, scipy и numpy, и вы сможете увидеть их, щелкнув вкладку среды в левой части главного экрана навигатора. страницу (ищите каждый каталог в альфа-порядке). Установка полной анаконды (в отличие от miniconda или отдельных пакетов) позаботится об установке многих основных пакетов, необходимых для науки о данных.
numpy.__config__
действительно должен быть общедоступный API. Тем не менее, вы выиграли этот раунд, давост .