在多个核上执行矢量化函数

时间:2014-04-29 13:20:10

标签: python numpy

我有一些函数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 个答案:

答案 0 :(得分:3)

使用numpy.vectorize通常不是一个好主意。它没有任何并行化,事实上,由于它的工作方式,性能通常都不是很好(如in its documentation所述)。因此,您需要在内部对f(x,y)函数进行向量化,或者将其作为C或C ++或Fortran等模块实现。

如果你想在Python中真正使用多个核心,最好的办法是使用threading模块(如果你的功能是用C实现的话),或者multiprocessing如果你想尝试运行原生的Python(包括NumPy)。