gpt4 book ai didi

Python:快速/高效实现 Kullback Leibler 散度进行多重分布计算

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:42 25 4
gpt4 key购买 nike

我有以下问题:我有一个矩阵,比如 20K 离散分布(直方图),我需要计算这些对之间的 KL 散度 (KLD)。简单的方法是使用两个 for 循环并通过标准 KLD 计算计算每两个分布之间的 KLD。这需要时间。很多时间。我想知道上面有某种基于矩阵/数组的计算。我当然不是第一个遇到这个问题的人。不幸的是我是 python 的新手。任何帮助将不胜感激。谢谢!A.

最佳答案

我找到了 Computation of Kullback-Leibler (KL) distance between text-documents using numpy其中指出 SciPy 将 KLD 实现为

scipy.stats.entropy(pk, qk=None, base=None)

和文档可以在 http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.stats.entropy.html 找到;这应该会使计算本身更快。

或者,an implementation in numpy :

import numpy as np

def kl(p, q):
"""Kullback-Leibler divergence D(P || Q) for discrete distributions

Parameters
----------
p, q : array-like, dtype=float, shape=n
Discrete probability distributions.
"""
p = np.asarray(p, dtype=np.float)
q = np.asarray(q, dtype=np.float)

return np.sum(np.where(p != 0, p * np.log(p / q), 0))

请注意,与 numpy 数组之间的数据转换相对较慢;我不知道是保留一个 20k 1D numpy 数组列表(可能会非常占用内存),还是保留一个 2D numpy 数组并对切片进行操作会更好。

关于Python:快速/高效实现 Kullback Leibler 散度进行多重分布计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24913425/

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