Jawaban:
Metode numpy.show_config()
(atau numpy.__config__.show()
) menampilkan informasi tentang tautan yang dikumpulkan pada waktu pembuatan. Output saya terlihat seperti ini. Saya pikir itu berarti saya menggunakan BLAS / LAPACK yang dikirimkan dengan 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
ditampilkan berarti numpy dikaitkan dengan Lapack?
numpy.show_config()
, yang mungkin merupakan fungsi API publik berdasarkan tidak adanya mulai menggarisbawahi. Tapi itu tidak didokumentasikan secara online dan tidak memiliki dokumen, jadi tidak mengherankan bahwa itu sangat sulit ditemukan. Semoga mereka akan memperbaikinya.
Yang Anda cari adalah ini: info sistem
Saya mengkompilasi numpy / scipy dengan atlas dan saya dapat memeriksanya dengan:
import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')
Periksa dokumentasi untuk lebih banyak perintah.
sysinfo.get_info('atlas')
tidak mengembalikan apa pun untuk saya kecuali sysinfo.get_info('blas')
kembali {'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']}
dan sysinfo.get_info('lapack')
kembali {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
Apa artinya?
Karena menggunakan versi yang dimuat secara dinamis, Anda bisa melakukan ini:
$ ldd anyoftheCmodules.so
di mana anyoftheCmodules.so
bisa, misalnya numpy/core/_dotblas.so
, yang terhubung ke libblas.so
.
numpy/core/_dotblas.so
? (lihat komentar di bawah, jawaban talonmies)
.so
file di sana. Cukup cari di dalam direktori NumPy (katakanlah, menggunakan find /path/to/numpy -name "*.so"
). Beberapa dari mereka ( _dotblas.so
, di lapack_lite.so
bawah Ubuntu yang dikompilasi, misalnya) memanfaatkan BLAS / LAPACK
_dotblas.so
tidak ada lagi di numpy v1.10 dan yang lebih baru , tetapi Anda dapat memeriksa multiarray.so
numpy.__config__
objek kanonik saat runtime. (Lihat davost Ini sangat baik jawaban .)
Anda dapat menggunakan alat ketergantungan tautan pemuat untuk melihat komponen kait level C dari bangunan Anda dan melihat apakah mereka memiliki ketergantungan eksternal pada blas dan pilihan Anda. Saya tidak berada di dekat kotak linux sekarang, tetapi pada mesin OS X Anda dapat melakukan ini di dalam direktori paket situs yang menyimpan instalasi:
$ 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)
gantikan ldd
di otool
sistem gnu / Linux dan Anda harus mendapatkan jawaban yang Anda butuhkan.
numpy/core/_dotblas.so
? (lihat komentar di bawah, jawaban Ricardos)
_dotblas.so
yang merupakan pembungkus antarmuka untuk blas apa pun yang telah digunakan untuk membangun distribusi. Di windows akan dipanggil _dotblas.pyd
, tetapi fungsinya sama.
_dotblas.so
hanya dibangun jika Anda menggunakan [atlas]
bagian dalam site.cfg
(dan perpustakaan BLAS yang diaktifkan CBLAS). Jadi, Anda harus menggunakannya, bahkan jika Anda tidak menggunakan ATLAS (kecuali ketika Anda menggunakan Intel MKL, yang memiliki bagian khusus).
_dotblas.so
tidak ada lagi di numpy v1.10 dan yang lebih baru , tetapi Anda dapat memeriksa multiarray.so
Anda dapat menampilkan BLAS, LAPACK, tautan MKL menggunakan show_config()
:
import numpy as np
np.show_config()
Yang bagi saya memberikan 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)]
?
HAVE_CBLAS
sedang didefinisikan tetapi tidak memiliki nilai (pikirkan C:) #define HAVE_CBLAS
. Tidak perlu nilai karena hanya digunakan sebagai bendera. Saya akan menafsirkannya sebagai HAVE_CBLAS=True
. Jika Anda tidak memiliki CBLAS, Anda tidak akan memiliki tuple di sana.
Jika Anda menginstal anaconda-navigator (di www.anaconda.com/anaconda/install/ untuk linux, Windows atau macOS) - blas, scipy dan numpy semuanya akan diinstal dan Anda dapat melihatnya dengan mengklik tab lingkungan di sisi kiri rumah navigator halaman (cari setiap direktori dalam urutan alfa). Menginstal anaconda penuh (tidak seperti miniconda atau paket individual) akan menangani menginstal banyak paket penting yang diperlukan untuk ilmu data.
numpy.__config__
harus benar-benar menjadi API publik. Meskipun demikian, Anda memenangkan ronde ini, davost .