poster
2019-12-14, 20:13
我正在寻找针对Python(Scipy,Numpy)的MATLAB parfor的明确答案。
是否有类似于parfor的解决方案?如果没有,创建一个的复杂性是什么?
更新:这是我需要加快速度的典型数值计算代码
import numpy as np N = 2000 output = np.zeros([N,N]) for i in range(N): for j in range(N): output[i,j] = HeavyComputationThatIsThreadSafe(i,j) 繁重的计算功能的一个示例是:
import scipy.optimize def HeavyComputationThatIsThreadSafe(i,j): n = i * j return scipy.optimize.anneal(lambda x: np.sum((x-np.arange(n)**2)), np.random.random((n,1)))[0][0,0]
回答:
有许多用于并行计算的Python框架 (http://wiki.python.org/moin/ParallelProcessing) 。我碰巧最喜欢的一个是IPython (http://ipython.scipy.org/) ,但是我对其他任何一个都不了解。在IPython中, client.MultiEngineClient.map()一个类似物是client.MultiEngineClient.map()或文档中有关快速简便的并行 (http://ipython.org/ipython-doc/stable/parallel/parallel_multiengine.html#quick-and-easy-parallelism)性的其他一些构造。
更多&回答... (https://stackoverflow.com/questions/4682429)
是否有类似于parfor的解决方案?如果没有,创建一个的复杂性是什么?
更新:这是我需要加快速度的典型数值计算代码
import numpy as np N = 2000 output = np.zeros([N,N]) for i in range(N): for j in range(N): output[i,j] = HeavyComputationThatIsThreadSafe(i,j) 繁重的计算功能的一个示例是:
import scipy.optimize def HeavyComputationThatIsThreadSafe(i,j): n = i * j return scipy.optimize.anneal(lambda x: np.sum((x-np.arange(n)**2)), np.random.random((n,1)))[0][0,0]
回答:
有许多用于并行计算的Python框架 (http://wiki.python.org/moin/ParallelProcessing) 。我碰巧最喜欢的一个是IPython (http://ipython.scipy.org/) ,但是我对其他任何一个都不了解。在IPython中, client.MultiEngineClient.map()一个类似物是client.MultiEngineClient.map()或文档中有关快速简便的并行 (http://ipython.org/ipython-doc/stable/parallel/parallel_multiengine.html#quick-and-easy-parallelism)性的其他一些构造。
更多&回答... (https://stackoverflow.com/questions/4682429)