Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scipy.stats.entropy给出了与熵公式不同的结果_Python_Numpy_Scipy - Fatal编程技术网

Python Scipy.stats.entropy给出了与熵公式不同的结果

Python Scipy.stats.entropy给出了与熵公式不同的结果,python,numpy,scipy,Python,Numpy,Scipy,我试图计算概率分布的信息熵,但是我得到了两个不同的答案,我不知道为什么或者哪个是正确的 我尝试使用scipy.stats.entropy 然后我查看了scipy.stats.entropy的源代码,与源代码一样,我使用scipy.special.entr计算了熵,得到了不同的答案 然后,我使用scipy.stats.entropy页面上给出的公式计算熵,得到了与2相同的答案 知道错误在哪里吗?熵自动规范化输入,使概率向量之和为1。您对f和g的计算不正确 如果您规范化数据,例如 data = np

我试图计算概率分布的信息熵,但是我得到了两个不同的答案,我不知道为什么或者哪个是正确的

  • 我尝试使用scipy.stats.entropy
  • 然后我查看了scipy.stats.entropy的源代码,与源代码一样,我使用scipy.special.entr计算了熵,得到了不同的答案
  • 然后,我使用scipy.stats.entropy页面上给出的公式计算熵,得到了与2相同的答案
    知道错误在哪里吗?

    自动规范化输入,使概率向量之和为1。您对
    f
    g
    的计算不正确

    如果您规范化
    数据
    ,例如

    data = np.random.rand(5)
    data /= data.sum()
    
    结果将一致:

    In [35]: data = np.random.rand(5)                                                            
    
    In [36]: data /= data.sum()                                                                  
    
    In [37]: entropy(data, base=2)                                                               
    Out[37]: 2.2295987226926375
    
    In [38]: np.sum(entr(data))/np.log(2)                                                        
    Out[38]: 2.2295987226926375
    
    In [39]: -np.sum(data*np.log2(data))                                                         
    Out[39]: 2.2295987226926375
    

    自动规范化输入,使概率向量之和为1。您对
    f
    g
    的计算不正确

    如果您规范化
    数据
    ,例如

    data = np.random.rand(5)
    data /= data.sum()
    
    结果将一致:

    In [35]: data = np.random.rand(5)                                                            
    
    In [36]: data /= data.sum()                                                                  
    
    In [37]: entropy(data, base=2)                                                               
    Out[37]: 2.2295987226926375
    
    In [38]: np.sum(entr(data))/np.log(2)                                                        
    Out[38]: 2.2295987226926375
    
    In [39]: -np.sum(data*np.log2(data))                                                         
    Out[39]: 2.2295987226926375