numpy.array 以整数数据初始化数组后造成的精度损失问题

在使用 n u m p y numpy numpy a r r a y array array 类型数据时发现一问题,情况如下:

问题

首先我创建一个其中元素均为整数,且没有指定数据类型的一维数组:

a = np.array([2,3,4,5]

然后,我改动数组 a \textbf{a} a 中的某个元素(这里以第一个为例)为浮点数:

a[0] = 0.9999

这时,查看数组 a \textbf{a} a 会发现第一个元素变成了 0,这就造成了后续程序的错误:
np.array

原因

查看官方文档可知, n u m p y numpy numpy a r r a y array array 的默认数据类型是根据初始化赋值数据决定的,即为能够存储初始化数据的最小数据类型。

numpy.array

而我在初始化向量 a \textbf{a} a 时传入的均为整型数据,这时该向量的数据类型被设置为 i n t 32 int 32 int32 ,所以在我将第一个元素设为浮点型数据时,会进行数据类型转换操作,将浮点型数据转换为整型( 0.999 < 1 0.999 < 1 0.999<1,被转化成 0 0 0 ),进而造成数据精度的损失:
dtype
所以,当定义一个今后有可能被改动的 a r r a y array array 数据(小的数据类型改动到大的数据类型)时,应该在初始化时设置数据类型或者在整数后面加上小数点(如 [2.0, 3, 4, 5])以避免上述问题的出现。
right

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值