Python 防止scipy进行多处理

Python 防止scipy进行多处理,python,numpy,scipy,Python,Numpy,Scipy,我用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)

我用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级别的多处理。请尝试设置env变量OPENBLAS_NUM_THREADS=1,这可能是由OPENBLAS在C级别执行多线程处理,而不是python级别的多处理。尝试设置env变量OPENBLAS_NUM_THREADS=1

yes,export OPENBLAS_NUM_THREADS=1解决了问题。谢谢。是的,export OPENBLAS_NUM_THREADS=1解决了这个问题。非常感谢。