马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
输出:
如果我随便将一项改成小数,例如 3.3:
arr = np.array([1,2,3.3,4,5,6,7,8,9]).reshape(3,3)
print(arr)
输出:
所有项都变成浮点类型了。
记住:
我们通过 dtype 方法来查看属性:
输出:
有鱼油会问:“可不可以自己指定类型?”
可以,看这里:
arr2 = np.array([1.1,2,3,4],dtype=np.int8).reshape(2,2)
print(arr2)
输出:
注意图中箭头所指处的“,”,有很多新手都会忘记~
看看 arr2 的类型:
输出:
我们再来看一个好玩的操作:
arr3 = np.array([1.1,2.9,3,-129],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 方法就可以转换类型。
代码:
输出:
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 鱼币)
如果有收获,别忘了评分 :
如果想看更多,请订阅 淘专辑( 传送门)( 不喜欢更要订阅 ) |