【发布时间】: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)
我期待功能完全相同,我错过了什么?
【问题讨论】: