Многопроцессорная обработка Python, оценка плотности ядра 1D - PullRequest
0 голосов
/ 24 февраля 2019

Так что я некоторое время использую KDE, и он мучительно медленен для наборов данных с размером строки 100 000 или более.Я выполняю свой код следующим образом:

def KernelFit(data):
     # compute bandwidth
     h = 1.06 * np.std(data)*data.shape[0]**(-1/5)
     kde = KernelDensity(kernel='gaussian', bandwidth = h ).fit(data)

     return np.exp(kde.score_samples(data))

Я попытался распараллелить процесс с помощью многопроцессорной обработки следующим образом:

   def ParallelKernel(data):
        h = 1.06 * np.std(data)*data.shape[0]**(-1/5)
        p = Pool()
        target = data
        func = partial(ProbFunction, h, data)
        pdfvals = p.map(func,target)
        return pdfvals

   def ProbFunction( h, data, t):
       ProbVal = 0
       for i in range(data.shape[0]):
                ProbVal += GaussKernel(t, data[i], h)
       return ProbVal/data.shape[0]



  def GaussKernel(t, x, h):
       Value = np.exp(-1 * (t - x)**2 / h)
       return Value

Однако многопроцессорный код работает в 20 раз медленнее.Может кто-нибудь сказать мне, почему и как?а есть ли более быстрые методы для обработки этого?

...