我正在尝试实现一个快速熵计算一个浮动的概率列表。
我尝试使用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])
输出:nan
错误信息:/var/文件夹/bt/vk3t9rnn2jz5d1wgj2rc3v200000gn/T/我的内核_61321/2272953976.py:3:运行时警告:在log2中遇到被零除的情况log_dist = np.log2(分布,输出= np. zeros_like(分布),其中=(分布!= 0))/var/文件夹/bt/vk3t9rnn2jz5d1wgj2rc3v200000gn/T/ipykernel_61321/2272953976.py:4:运行时警告:在乘数熵=-np. sum(分布 * log_dist)中遇到无效值
我原以为功能会完全一样,我错过了什么?
1条答案
按热度按时间g52tjvyc1#
啊,我是个白痴。我忘了把列表转换成numpy数组。修复: