归一化过程中由于精度问题导致除法后得到0

admin2024-07-07  64

import numpy as np
n=3
data=np.array([[100,2000,3],[400,5000,6],[700,8000,9]])
for j in range(n):
    data_sum=data[:,j].sum()
    for i in range(n):
        data[i][j]=data[i][j]/data_sum
print(data)

得到结果如下: 

[[0 0 0]
 [0 0 0]
 [0 0 0]]

 解决方式:

将数组的数据类型设置为np.float16,并且在除法运算时使用np.divide,这可以提供更好的精度控制,避免由于下溢导致的精度丢失问题。

dtype=np.float16
data=np.array([[100,2000,3],[400,5000,6],[700,8000,9]],dtype=dtype)

成功得到数据如下: 

[[0.0833 0.1333 0.1666]
 [0.3333 0.3333 0.3333]
 [0.5835 0.533  0.5   ]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!