我有一些用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.vectorize通常不是一个好主意。它没有并行化任何东西,实际上,由于其工作方式,其性能通常甚至都不是很好(如in its documentation所述)。因此,相反,您需要在内部对f(x,y)函数进行矢量化处理,或者将其实现为C或C ++或Fortran等模块。

如果您想真正地在Python中使用多个内核,最好的选择是如果函数是用C实现的,则使用threading模块,或者如果您尝试运行本机Python(包括NumPy),则使用multiprocessing

关于python - 在多个内核上执行矢量化功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23365871/

10-09 21:11