在多个核心上执行向量化函数
我有一个函数 f(x,y)
,我用 numpy.vectorize
命令把它变成了可以处理数组的形式。我为 x 和 y 创建了一些网格值,想要对这些值进行函数计算。我的程序是这样的:
from numpy import vectorize,meshgrid, linspace
@vectorize
def f(x,y):
pass
x = linspace(0,10)
y = linspace(0,10)
X, Y = meshgrid(x, y)
Z = f(X,Y)
当我在评估时间查看系统监视器(比如在 Ubuntu 上用 htop
)时,我发现只有一个核心在工作。有什么方法可以让我的计算更高效,充分利用系统资源呢?
1 个回答
3
使用 numpy.vectorize
通常不是个好主意。它并不能让你的代码同时在多个处理器上运行,实际上,它的性能也不太好,这主要是因为它的工作方式(具体可以在文档中找到说明)。所以,你需要考虑让你的 f(x,y)
函数在内部实现向量化,或者用 C、C++、Fortran 等语言来实现它。
如果你想在 Python 中真正利用多个核心,最好的选择是,如果你的函数是用 C 实现的,可以使用 threading
模块;如果你想运行原生的 Python 代码(包括 NumPy),那么可以使用 multiprocessing
模块。