04 - 整数类型的迷思|【int8 -129变127?】
本帖最后由 不二如是 于 2020-2-12 07:58 编辑上一讲我们知道了如何利用 Numpy 内置方法来处理数组,本节了解下 Numpy 中数据类型。
我们先利用 reshape 将一个一维列表转为 3*3 数组:
arr = np.array().reshape(3,3)
print(arr)
输出:
如果我随便将一项改成小数,例如 3.3:
arr = np.array().reshape(3,3)
print(arr)
输出:
所有项都变成浮点类型了。
记住:
**** Hidden Message *****
我们通过 dtype 方法来查看属性:
arr.dtype
输出:
有鱼油会问:“可不可以自己指定类型?”
可以,看这里:
arr2 = np.array(,dtype=np.int8).reshape(2,2)
print(arr2)
输出:
注意图中箭头所指处的“,”,有很多新手都会忘记~
看看 arr2 的类型:
print(arr2.dtype)
输出:
我们再来看一个好玩的操作:
arr3 = np.array(,dtype=np.int8).reshape(2,2)
print(arr3)
print(arr3.dtype)
输出:
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')
输出:
i2 就代表 int16,从结果看:不可以!
如果需要转,请在最开始就写成 int16 ,代码:
arr3 = np.array(,dtype=np.int16).reshape(2,2)
print(arr3)
print(arr3.dtype)
请自行测试。
下一讲我们来看浮点类型。
源码(随缘下载):
如果有收获,别忘了评分{:10_281:} :
http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif
如果想看更多,请订阅 淘专辑(传送门)(不喜欢更要订阅{:10_297:} ) 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼 C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 楼主辛苦了,谢谢楼主,感谢楼主分享,楼主好人一生平安!!! 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C 我爱 Numpy,我爱鱼C
页:
[1]