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

Python 在多核上执行矢量化函数,python,numpy,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) 当我在评估时间上查看系统监视器(例如Ubu

我有一些函数
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
)时,我发现只有一个内核被使用。在这样的计算中,有哪些选项可以让系统发挥最大作用?

使用
numpy。矢量化通常不是一个好主意。它没有并行化任何东西,事实上,由于它的工作方式,性能通常甚至不是很好(如前所述)。所以,你需要努力使你的<代码> f(x,y)< /c>函数在内部被矢量化,或者在C或C++或FORTRAN等

中作为一个模块来实现。
如果您想在Python中真正使用多核,最好的选择是使用
线程
模块(如果您的函数是用C实现的),或者
多处理
如果您试图运行本机Python(包括NumPy)。

您的f(x,y)是做什么的?与其使用@vectorize,不如实现您的函数,以便它能够处理ndarray参数,因为numpy.vectorize是BAD。python解释器只在一个内核上运行,尽管
numpy
可以使用多核设置(参见示例)。使用多核的一个简单方法是使用类似于
多处理
模块的东西。通常
f(x,y)
集成了一些其他函数
g(T,x,y)
以及
scipy.integrate.quad
。为什么numpy.vectorize不好?它使编码更容易!好的,如何实现矢量化功能以使用多个核?(+1表示答案中的内容。)如果
numexpr
可以处理函数
f(x,y)
,这可能是使用多个核的最简单方法。