鱼C论坛

 找回密码
 立即注册
查看: 8039|回复: 31

[技术交流] 05 - 速过浮点类型 |【初尝decimal库】

[复制链接]
发表于 2020-2-12 07:59:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2020-2-12 16:08 编辑

上一讲我们介绍完整数类型,这次来看浮点类型。

Numpy 中浮点(float)分为:float16(半精度)、float32(单精度)、float64(双精度)

浮点的计算机底层结构,科学技术法,偏移,我们就不讲啦,因为会跑的很远,大家也不见得跟得上。

不信吗?

就拿单进度来 float32 来说,它分为:1 位符号,8 位指数,23 位尾数...

指数中又有阶码...

搞懂这些呢,其实对理解 Numpy 也没啥用处。

你只需知道:

游客,如果您要查看本帖隐藏内容请回复

可爱的狱友们都接受过素质教育,那么告诉我:0.1 + 0.2 = 多少?

没错,记住你给的答案。

我们在 Numpy 中输入看看:
0.1 + 0.2
输出:
Snip20200212_318.png


怎么肥四??

继续测下这个:
0.1+0.1+0.1-0.3
输出:
Snip20200212_320.png

按理说是 0,但输出怎么不是 0 呢?

这就是用浮点数计算会来的问题。

如果在金融业,这个就很可怕啦,之前有解释过,这里也不细说啦。

如何得到我们想要的结果呢?

利用 round 方法。

例如我们将 0.1 + 0.2 结果取 1 位:
round(0.1+0.2,1)
输出:
Snip20200212_321.png


第二个也一样:
round(0.1+0.1+0.1-0.3,1)
输出:
Snip20200212_322.png


这样就不关心后面的小尾巴了。

不过这种很“鲁莽”,生生的切数字!

decimal 库

更好的做法就是使用 decimal 用于计算十进制数。

需要导入:
from decimal import Decimal
然后看下 0.1 存在计算机中是什么样子:
Decimal(0.1)
输出:
Snip20200212_323.png


相加时如何避免后面的一堆数呢?

可以先转为字符串(整数可以不写 ' '):
a = Decimal('0.1')
b = Decimal('0.2')
a+b
输出:
Snip20200212_324.png


不循环小数也可以:
a = Decimal('10')
b = Decimal('3')
a/b
输出:
Snip20200212_325.png


我们有的时候不需要太多位数,就可以使用 getcontext()

看一下官方的使用说明:
from decimal import getcontext
c = getcontext()
c
输出:
Snip20200212_326.png


输出里面对应的都是参数说明,重点关注 prec 。

它代表位数,28 意味着有 28 位。

我们手动将其缩小,再来跑一下:
c.prec = 2
a = Decimal('10')
b = Decimal('3')
a/b
结果你们自己试~


Numpy 中浮点类型的坑

我们用半精度 float16 创建一个数组:
arr1 = np.array([1.1,2.2,3.3,4],dtype=np.float16).reshape(2,2)
arr1
输出:
Snip20200212_327.png


计算机中精度不同,存在的值会有误差。

例如先用到向量化计算,为每位 * 10000:
arr1 *10000
输出:
Snip20200212_328.png


如果一开始我们就用默认的 float64,再来看:
arr2 = np.array([1.1,2.2,3.3,4],dtype=np.float64).reshape(2,2)
arr2 * 10000
输出:
Snip20200212_329.png


这个输出就是我们要的。

如果数字精度要求非常高,浮点数的精度就要严格使用。

Numpy 中通过 set_printoptions(precision=?) 来设置精度:
np.set_printoptions(precision=2)
arr3 = np.array([1,2,3,4]).reshape(2,2)
arr3/3
Snip20200212_330.png


最后科普下浮点类型的精度范围:

  • float16(f2) 10^5 - 10^-5
  • float32(f4) 10^38 - 10^-38
  • float64(f8) 10^308 - 10^-308

精度越大,代表范围越大,各有各的好处。

如果是分布式计算,用 float16 就可以。

日常我们不用特意指定,一律用默认就好。

下一讲,我们学习最常用的索引,切片,花式索引

源码: 05Float.zip (448 Bytes, 下载次数: 4, 售价: 3 鱼币)




如果有收获,别忘了评分


                               
登录/注册后可看大图


如果想看更多,请订阅 淘专辑传送门)(不喜欢更要订阅

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-12 08:20:01 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
抢好沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 08:47:07 | 显示全部楼层
怎么和小甲鱼一样的套路  未完待续...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-12 09:22:23 | 显示全部楼层
Judie 发表于 2020-2-12 08:47
怎么和小甲鱼一样的套路  未完待续...

很快填坑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 13:25:50 | 显示全部楼层
Numpy 好好玩,我已订阅淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-12 19:39:03 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-18 22:41:03 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 10:28:46 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 15:53:08 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-4 16:09:04 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 20:57:35 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 18:47:19 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 13:20:17 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 13:31:39 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 16:29:16 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-13 21:19:18 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-23 14:49:13 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-28 14:10:57 | 显示全部楼层
Numpy 好好玩,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 15:02:23 | 显示全部楼层
Numpy 好好玩,我要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 17:33:24 From FishC Mobile | 显示全部楼层
Numpy 好好玩,我不要订阅 淘专辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 20:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表