在多个核心上执行向量化函数

3 投票
1 回答
1407 浏览
提问于 2025-04-18 04:45

我有一个函数 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 模块。

撰写回答