【问题标题】:numpy log2 zero masking only works outside of functionnumpy log2 零掩码仅在函数外有效
【发布时间】:2023-02-15 21:32:37
【问题描述】:

我正在尝试为概率的浮动列表实现快速熵计算。

我没有遍历列表,每次都检查是否不为零,而是尝试使用 numpy 的内置屏蔽功能来屏蔽零。它工作得非常好,除非我尝试将它放入一个函数中,此时它会中断。有什么建议么?

# Works fine!!
distribution = np.array([0.20, 0.3, 0.25, 0.25, 0])

log_dist = np.log2(distribution, out=np.zeros_like(distribution), where=(distribution!=0))
entropy = -np.sum(distribution * log_dist)

print(entropy)
# Breaks!
def calculate_entropy(distribution):
    
    log_dist = np.log2(distribution, out=np.zeros_like(distribution), where=(distribution!=0))
    entropy = -np.sum(distribution * log_dist)
    
    return entropy

calculate_entropy([0.20, 0.3, 0.25, 0.25, 0])

输出: 楠

错误信息: /var/folders/bt/vk3t9rnn2jz5d1wgj2rc3v200000gn/T/ipykernel_61321/2272953976.py:3: RuntimeWarning: 在 log2 中遇到被零除 log_dist = np.log2(分布,out=np.zeros_like(分布),其中=(分布!=0)) /var/folders/bt/vk3t9rnn2jz5d1wgj2rc3v200000gn/T/ipykernel_61321/2272953976.py:4: RuntimeWarning: 乘法遇到无效值 熵 = -np.sum(分布 * log_dist)

我期待功能完全相同,我错过了什么?

【问题讨论】:

    标签: python numpy jupyter


    【解决方案1】:

    呃,我是个白痴。我忘了将列表转换为 numpy 数组。使固定:

    def calculate_entropy(distribution):
    
        distribution = np.array(distribution)
        log_dist = np.log2(distribution, out=np.zeros_like(distribution), where=(distribution!=0))
        entropy = -np.sum(distribution * log_dist)
        
        return entropy
    
    calculate_entropy([0.20, 0.3, 0.25, 0.25, 0])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2017-11-09
      • 2014-09-08
      • 2018-04-09
      相关资源
      最近更新 更多