Câu trả lời:
Phương thức numpy.show_config()
(hoặc numpy.__config__.show()
) xuất thông tin về liên kết được thu thập tại thời điểm xây dựng. Đầu ra của tôi trông như thế này. Tôi nghĩ rằng nó có nghĩa là tôi đang sử dụng BLAS / LAPACK đi kèm với 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
được hiển thị có nghĩa là numpy được liên kết với lapack?
numpy.show_config()
, đây có thể là một hàm API công khai nhờ vào việc không bắt đầu dấu gạch dưới. Nhưng nó không được ghi lại trực tuyến và không có chuỗi, vì vậy không có gì ngạc nhiên khi nó rất khó tìm. Hy vọng họ sẽ khắc phục điều đó.
Những gì bạn đang tìm kiếm là đây: thông tin hệ thống
Tôi đã biên dịch numpy / scipy với atlas và tôi có thể kiểm tra điều này với:
import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')
Kiểm tra tài liệu để biết thêm các lệnh.
sysinfo.get_info('atlas')
không trả lại gì cho tôi nhưng sysinfo.get_info('blas')
trả lại {'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']}
và sysinfo.get_info('lapack')
trả lại {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
Có nghĩa là gì?
Vì nó sử dụng các phiên bản được tải động, bạn có thể thực hiện việc này:
$ ldd anyoftheCmodules.so
nơi anyoftheCmodules.so
có thể, ví dụ, numpy/core/_dotblas.so
liên kết đến libblas.so
.
numpy/core/_dotblas.so
thì sao? (xem bình luận bên dưới câu trả lời của Talonmies)
.so
tập tin trong đó. Chỉ cần tìm kiếm trong thư mục NumPy (giả sử sử dụng find /path/to/numpy -name "*.so"
). Một cặp vợ chồng của những người ( _dotblas.so
, lapack_lite.so
dưới một biên dịch sẵn của Ubuntu, ví dụ) làm cho sử dụng BLAS / LAPACK
_dotblas.so
không còn tồn tại trong numpy v1.10 và mới hơn , nhưng bạn có thể kiểm tra liên kết multiarray.so
thay thế
numpy.__config__
đối tượng kinh điển trong thời gian chạy thay thế. (Xem câu trả lời xuất sắc của davost .)
Bạn có thể sử dụng công cụ phụ thuộc trình tải liên kết để xem xét các thành phần hook cấp độ C trong bản dựng của bạn và xem liệu chúng có phụ thuộc bên ngoài vào blas và lapack của bạn không. Tôi không ở gần một hộp linux ngay bây giờ, nhưng trên máy OS X, bạn có thể thực hiện việc này trong thư mục gói trang chứa các cài đặt:
$ 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)
thay thế ldd
ở vị trí của otool
một gnu / hệ thống Linux và bạn sẽ nhận được câu trả lời mà bạn cần.
numpy/core/_dotblas.so
thì sao? (xem bình luận bên dưới câu trả lời của Ricardos)
_dotblas.so
trình bao bọc giao diện cho bất kỳ blas nào đã được sử dụng để xây dựng bản phân phối. Trên cửa sổ nó sẽ được gọi _dotblas.pyd
, nhưng chức năng là như nhau.
_dotblas.so
chỉ được tạo nếu bạn đang sử dụng một [atlas]
phần trong site.cfg
(và thư viện BLAS hỗ trợ CBLAS). Vì vậy, bạn nên sử dụng nó, ngay cả khi bạn không sử dụng ATLAS (trừ khi bạn đang sử dụng Intel MKL, có phần dành riêng).
_dotblas.so
không còn tồn tại trong numpy v1.10 và mới hơn , nhưng bạn có thể kiểm tra liên kết multiarray.so
thay thế
Bạn có thể hiển thị liên kết BLAS, LAPACK, MKL bằng cách sử dụng show_config()
:
import numpy as np
np.show_config()
Mà cho tôi đầu ra:
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
là đang được xác định nhưng không có giá trị (nghĩ C #define HAVE_CBLAS
:). Nó không cần một giá trị vì nó chỉ được sử dụng như một cờ. Tôi sẽ giải thích nó như là HAVE_CBLAS=True
. Nếu bạn không có CBLAS, bạn sẽ không có bộ dữ liệu nào cả.
Nếu bạn đã cài đặt anaconda-navigator (tại www.anaconda.com/anaconda/install/ cho linux, Windows hoặc macOS) - blas, scipy và numpy đều sẽ được cài đặt và bạn có thể thấy chúng bằng cách nhấp vào tab môi trường ở bên trái của nhà điều hướng trang (tìm từng thư mục theo thứ tự alpha). Cài đặt đầy đủ anaconda (trái ngược với miniconda hoặc các gói riêng lẻ) sẽ đảm nhiệm việc cài đặt nhiều gói thiết yếu cần thiết cho khoa học dữ liệu.
numpy.__config__
nên thực sự là một API công khai. Tuy nhiên, bạn giành chiến thắng trong vòng này, davost .