我正在使用 scipy 来计算向量的旋转。以下代码是重现我的问题的最小代码。它在数学上不一定正确。
import numpy as np
from scipy.linalg import expm
axis = np.array([5.0, 8.0, -2.0])
axis = axis/(np.sum(axis**2)**0.5)
theta = 0.001
for t in range(1000000):
cx = np.cross(np.eye(3), axis*theta)
M0 = expm(cx)
cx = np.dot(M0, cx)
print cx
我的问题是运行这段代码占用了我 300% 的 CPU,即在 3 个内核上运行。我相信这是由于 scipy.linalg.expm 函数造成的,因为单独的 numpy 函数最多只使用了 100%。我的问题是,如何将 scipy 配置为仅使用单核?
我不记得曾经将它链接到任何 linalg 库,但这是我的配置:
#numpy
numpy.__config__.show()
lapack_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
blas_opt_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
openblas_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
blis_info:
NOT AVAILABLE
openblas_lapack_info:
libraries = ['openblas', 'openblas']
library_dirs = ['/usr/local/lib']
define_macros = [('HAVE_CBLAS', None)]
language = c
lapack_mkl_info:
NOT AVAILABLE
blas_mkl_info:
NOT AVAILABLE
#scipy
scipy.__config__.show()
lapack_opt_info:
libraries = ['openblas']
library_dirs = ['/usr/local/lib']
language = f77
blas_opt_info:
libraries = ['openblas']
library_dirs = ['/usr/local/lib']
language = f77
openblas_info:
libraries = ['openblas']
library_dirs = ['/usr/local/lib']
language = f77
openblas_lapack_info:
libraries = ['openblas']
library_dirs = ['/usr/local/lib']
language = f77
blas_mkl_info:
NOT AVAILABLE
请您参考如下方法:
这可能是 openblas 在 C 级别上的多线程,而不是 python 级别的多处理。尝试设置环境变量 OPENBLAS_NUM_THREADS=1
