鱼C论坛

 找回密码
 立即注册
查看: 3885|回复: 17

[技术交流] 04 - 整数类型的迷思|【int8 -129变127?】

[复制链接]
发表于 2020-2-11 08:58:45 | 显示全部楼层 |阅读模式

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

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

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

上一讲我们知道了如何利用 Numpy 内置方法来处理数组,本节了解下 Numpy 中数据类型。

我们先利用 reshape 将一个一维列表转为 3*3 数组:
arr = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
print(arr)
输出:
Snip20200211_301.png


如果我随便将一项改成小数,例如 3.3:
arr = np.array([1,2,3.3,4,5,6,7,8,9]).reshape(3,3)
print(arr)
输出:
Snip20200211_302.png


所有项都变成浮点类型了。

记住:

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

我们通过 dtype 方法来查看属性:
arr.dtype
输出:

Snip20200211_303.png


有鱼油会问:“可不可以自己指定类型?”

可以,看这里:
arr2 = np.array([1.1,2,3,4],dtype=np.int8).reshape(2,2)
print(arr2)
输出:
Snip20200211_305.png


注意图中箭头所指处的“,”,有很多新手都会忘记~

看看 arr2 的类型:
print(arr2.dtype)
输出:
Snip20200211_307.png


我们再来看一个好玩的操作:
arr3 = np.array([1.1,2.9,3,-129],dtype=np.int8).reshape(2,2)
print(arr3)
print(arr3.dtype)
输出:
Snip20200211_309.png


2.9 取整就是 2 还可以理解,但 -129 为什么变成 127 了呢?

如果你知道字节转化,原码,反码,补码,符号位转换,你就知道答案...

但是由于本系列主讲 Numpy,就不做详细科普啦。

往下看有一个宏观层面上的解释。


Numpy的数据类型

Numpy 中整数(int)分为:有符号,无符号。

有符号包括:int8,int16,int32,int64

数字代表位数,8 代表 1 个字节,以此类推,字节越多,范围越大。

无符号包括:uint8,uint16,uint32,uint64

看一下各个字节的适用范围:

  • int8(i1) 字节(-128 ~ 127)
  • int16(i2) 16 位整数(-32768 ~ 32767)
  • int32(i4) 32 位整数(-2147483648 ~ 2147483647)
  • int64(i6) 64 位整数(-9223372036854775808 ~ 9223372036854775807)
  • uint8(u1) 8 位无符号整数(0 ~ 255)
  • uint16(u2) 16 位无符号整数(0 ~ 65535)
  • uint32(u4) 32 位无符号整数(0 ~ 4294967295)
  • uint64(u8) 64 位无符号整数(0 ~ 18446744073709551615)

其中()中的数字都代表字节,可以直接用简写(看下面代码)

int8 只能用于 -128 到 127,只能到 -128 。

-129 需要用到 int16 。

原码:1000000010000001

反码:1111111101111110

补码:1111111101111111

int16 强转为 int8 的话,补码左边 8 位就不要啦!

变为:01111111,对应的就是 127 。

这些如果你喜欢可以研究下,不难~

不想研究的话,大概知道是进制转换就可以。


小挖坑

那么有鱼油会问:怎么能转换数据类型呢?

Numpy 中的 astype 方法就可以转换类型。

代码:
arr3.astype('i2')
输出:
Snip20200211_310.png


i2 就代表 int16,从结果看:不可以

如果需要转,请在最开始就写成 int16 ,代码:
arr3 = np.array([1.1,2.9,3,-129],dtype=np.int16).reshape(2,2)
print(arr3)
print(arr3.dtype)
请自行测试。

下一讲我们来看浮点类型

源码(随缘下载): 04NumptInt.zip (343 Bytes, 下载次数: 2, 售价: 3 鱼币)




如果有收获,别忘了评分


                               
登录/注册后可看大图


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

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2020-2-11 11:04:31 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 15:25:53 | 显示全部楼层
我爱 Numpy,我爱鱼 C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 15:32:12 From FishC Mobile | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 17:31:56 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 12:43:01 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 20:49:20 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-10 18:46:19 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 13:14:12 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 16:22:48 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2020-9-27 09:09:57 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-27 09:39:05 | 显示全部楼层
楼主辛苦了,谢谢楼主,感谢楼主分享,楼主好人一生平安!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-21 15:41:40 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-24 20:40:52 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-24 20:56:36 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-25 11:18:23 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-7 21:43:10 | 显示全部楼层
我爱 Numpy,我爱鱼C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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