Iol*_*kos 5 python arrays numpy scipy
我正在将 KL-divergence 的 SciPy 实现([ http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.stats.entropy.html])用于两个不同的 numpy 数组。
第一个,假设“base_freq”的标准长度为 2000 第二个,“test_freq”长度可以根据样本采用不同的值。所以假设它的长度是 8000。
当这两个长度不相同时,如何计算 KL 散度???
我的想法是将第二个数组 ( "test_freq" )分解为多个长度为 2000 的数组。但是这是怎么做到的??当“test_freq”获得长度为 250 的样本时会发生什么?
我应该在序言中说我不是信息论专家。对于我使用 KL 散度的一个应用程序,我逐像素比较两个图像以计算丢失的位数。如果图像具有不同的尺寸,您提出的方法将要求对于较小图像中的每个像素,我选择较大图像中的相应像素,而不是任何旧像素。我的理解是,只有当您比较以相同方式采样的两个信号(即相同的时间或空间采样间隔)时,KL 散度才有意义。
如果您想做您建议的事情,您可以使用numpy.random.choice
:
import numpy as np
def uneven_kl_divergence(pk,qk):
if len(pk)>len(qk):
pk = np.random.choice(pk,len(qk))
elif len(qk)>len(pk):
qk = np.random.choice(qk,len(pk))
return np.sum(pk * np.log(pk/qk))
Run Code Online (Sandbox Code Playgroud)