gpt4 book ai didi

python - Scipy:ipython 笔记本中的并行计算?

转载 作者:行者123 更新时间:2023-12-05 05:25:02 30 4
gpt4 key购买 nike

我正在对数据集(点的集合)进行核密度估计

估计过程没问题,问题是,当我尝试获取每个点的密度值时,速度很慢:

from sklearn.neighbors import KernelDensity
# this speed is ok
kde = KernelDensity(bandwidth=2.0,atol=0.0005,rtol=0.01).fit(sample)
# this is very slow
kde_result = kde.score_samples(sample)

样本由 300,000 (x,y) 个点组成

我想知道是否可以让它并行运行,这样速度会更快?

例如,也许我可以将sample 分成更小的集合并同时为每个集合运行score_samples?具体来说:

  1. 我根本不熟悉并行计算。所以我想知道它是否适用于我的情况?
  2. 如果这真的可以加快进程,我应该怎么做?我只是在 ipython notebook 中运行脚本,之前没有这方面的经验,有没有适合我的案例的简单好例子?

我正在阅读 http://ipython.org/ipython-doc/dev/parallel/parallel_intro.html现在。

更新:

import cProfile
cProfile.run('kde.score_samples(sample)')

64 function calls in 8.653 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 8.653 8.653 <string>:1(<module>)
2 0.000 0.000 0.000 0.000 _methods.py:31(_sum)
2 0.000 0.000 0.000 0.000 base.py:870(isspmatrix)
1 0.000 0.000 8.653 8.653 kde.py:133(score_samples)
4 0.000 0.000 0.000 0.000 numeric.py:464(asanyarray)
2 0.000 0.000 0.000 0.000 shape_base.py:60(atleast_2d)
2 0.000 0.000 0.000 0.000 validation.py:105(_num_samples)
2 0.000 0.000 0.000 0.000 validation.py:126(_shape_repr)
6 0.000 0.000 0.000 0.000 validation.py:153(<genexpr>)
2 0.000 0.000 0.000 0.000 validation.py:268(check_array)
2 0.000 0.000 0.000 0.000 validation.py:43(_assert_all_finite)
6 0.000 0.000 0.000 0.000 {hasattr}
4 0.000 0.000 0.000 0.000 {isinstance}
12 0.000 0.000 0.000 0.000 {len}
2 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
2 0.000 0.000 0.000 0.000 {method 'join' of 'str' objects}
1 8.652 8.652 8.652 8.652 {method 'kernel_density' of 'sklearn.neighbors.kd_tree.BinaryTree' objects}
2 0.000 0.000 0.000 0.000 {method 'reduce' of 'numpy.ufunc' objects}
2 0.000 0.000 0.000 0.000 {method 'sum' of 'numpy.ndarray' objects}
6 0.000 0.000 0.000 0.000 {numpy.core.multiarray.array}

最佳答案

这是一个使用 multiprocessing built-in module 进行并行化的简单示例:

import numpy as np
import multiprocessing
from sklearn.neighbors import KernelDensity

def parrallel_score_samples(kde, samples, thread_count=int(0.875 * multiprocessing.cpu_count())):
with multiprocessing.Pool(thread_count) as p:
return np.concatenate(p.map(kde.score_samples, np.array_split(samples, thread_count)))

kde = KernelDensity(bandwidth=2.0,atol=0.0005,rtol=0.01).fit(sample)
kde_result = parrallel_score_samples(kde, sample)

正如您从上面的代码中看到的,multiprocessing.Pool 允许您映射一个工作进程池,在您的样本子集上执行 kde.score_samples
如果您的处理器有足够的核心,加速将是显着的。

关于python - Scipy:ipython 笔记本中的并行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32625094/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com