与多处理、joblib 或多进程的并行化不起作用
Parallelization with multiprocessing, joblib or multiprocess is not working
这个 Whosebug post 很好地展示了一种计算 RandomForestClassifier()
.
的邻近矩阵的方法
Proximity Matrix in sklearn.ensemble.RandomForestClassifier
然而,如果您有一个大数据框,该脚本中的 for 循环会非常慢。我试图并行化这个 for 循环,但没有成功。我只得到 'None' 作为输出。
如何在 Spyder 4 运行 [=24= 中并行化这个 for 循环]Python 3.8.5 在 Windows 10?
proxMat = 1*np.equal.outer(a, a)
for i in range(1, nTrees):
a = terminals[:,i]
proxMat += 1*np.equal.outer(a, a)
这里你想执行一个reduce操作——所以并行化不是很明显。
您没有指定如何尝试并行化循环。
并行化的简单方法:
import multiprocessing
pool = multiprocessing.Pool(processes=4)
def get_outer(i):
return np.equal.outer(terminals[:,i],terminals[:,i])
todo = list(range(1, nTrees))
results = pool.map(get_outer, todo)
proxMat = 1*np.equal.outer(a, a)
for res in results:
proxMat+ = res
我不确定这个是否有帮助,但可能你会遇到更少的酸洗问题:
import multiprocessing
pool = multiprocessing.Pool(processes=4)
def get_outer(t):
return np.equal.outer(t,t)
# This part might be costly !
terms = [terminals[:,i] for i in range(1, nTrees)]
results = pool.map(get_outer, terms)
proxMat = 1*np.equal.outer(a, a)
for res in results:
proxMat+ = res
这个 Whosebug post 很好地展示了一种计算 RandomForestClassifier()
.
Proximity Matrix in sklearn.ensemble.RandomForestClassifier
然而,如果您有一个大数据框,该脚本中的 for 循环会非常慢。我试图并行化这个 for 循环,但没有成功。我只得到 'None' 作为输出。
如何在 Spyder 4 运行 [=24= 中并行化这个 for 循环]Python 3.8.5 在 Windows 10?
proxMat = 1*np.equal.outer(a, a)
for i in range(1, nTrees):
a = terminals[:,i]
proxMat += 1*np.equal.outer(a, a)
这里你想执行一个reduce操作——所以并行化不是很明显。 您没有指定如何尝试并行化循环。 并行化的简单方法:
import multiprocessing
pool = multiprocessing.Pool(processes=4)
def get_outer(i):
return np.equal.outer(terminals[:,i],terminals[:,i])
todo = list(range(1, nTrees))
results = pool.map(get_outer, todo)
proxMat = 1*np.equal.outer(a, a)
for res in results:
proxMat+ = res
我不确定这个是否有帮助,但可能你会遇到更少的酸洗问题:
import multiprocessing
pool = multiprocessing.Pool(processes=4)
def get_outer(t):
return np.equal.outer(t,t)
# This part might be costly !
terms = [terminals[:,i] for i in range(1, nTrees)]
results = pool.map(get_outer, terms)
proxMat = 1*np.equal.outer(a, a)
for res in results:
proxMat+ = res