numpy数据类型dtype转换这篇⽂章我们玩玩numpy的数值数据类型转换
导⼊numpy
>>> import numpy as np
⼀、随便玩玩
⽣成⼀个浮点数组
>>> a = np.random.random(4)
看看信息
>>> a
array([ 0.0945377 ,  0.52199916,  0.62490646,  0.21260126])
>>> a.dtype
dtype('float64')
>>> a.shape
(4,)
改变dtype,发现数组长度翻倍!
>>> a.dtype = 'float32'
>>> a
array([  3.65532693e+20,  1.43907535e+00,  -3.31994873e-25,
1.75549972e+00,  -
2.75686653e+14,  1.78122652e+00,
-1.03207532e-19,  1.58760118e+00], dtype=float32)
>>> a.shape
(8,)
改变dtype,数组长度再次翻倍!
>>> a.dtype = 'float16'
>>> a
array([ -9.58442688e-05,  7.19000000e+02,  2.38159180e-01,
1.92968750e+00,              nan,  -1.66034698e-03,
-2.63427734e-01,  1.96875000e+00,  -1.07519531e+00,
-1.19625000e+02,              nan,  1.97167969e+00,
-1.60156250e-01,  -7.76290894e-03,  4.07226562e-01,
1.94824219e+00], dtype=float16)
>>> a.shape
(16,)
改变dtype='float',发现默认就是float64,长度也变回最初的4
>>> a.dtype = 'float'
>>> a
array([ 0.0945377 ,  0.52199916,  0.62490646,  0.21260126])
>>> a.shape
(4,)
>>> a.dtype
dtype('float64')
把a变为整数,观察其信息
>>> a.dtype = 'int64'
>>> a
array([4591476579734816328, 4602876970018897584, 4603803876586077261,
4596827787908854048], dtype=int64)
>>> a.shape
(4,)
改变dtype,发现数组长度翻倍!
>>> a.dtype = 'int32'
>>> a
array([ 1637779016,  1069036447, -1764917584,  1071690807,  -679822259,
1071906619, -1611419360,  1070282372])
>>> a.shape
(8,)
改变dtype,发现数组长度再次翻倍!
>>> a.dtype = 'int16'
>>> a
array([-31160,  24990,  13215,  16312,  32432, -26931, -19401,  16352,
-17331, -10374,  -197,  16355, -20192, -24589,  13956,  16331], dtype=int16)
>>> a.shape
(16,)
改变dtype,发现数组长度再次翻倍!
>>> a.dtype = 'int8'
>>> a
array([  72, -122,  -98,  97,  -97,  51,  -72,  63,  -80,  126,  -51,
-
106,  55,  -76,  -32,  63,  77,  -68,  122,  -41,  59,  -1,
-29,  63,  32,  -79,  -13,  -97, -124,  54,  -53,  63], dtype=int8)
>>> a.shape
(32,)
改变dtype,发现整数默认int32!
>>> a.dtype = 'int'
numpy教程pdf电子书>>> a.dtype
dtype('int32')
>>> a
array([ 1637779016,  1069036447, -1764917584,  1071690807,  -679822259,
1071906619, -1611419360,  1070282372])
>>> a.shape
(8,)
⼆、换⼀种玩法
很多时候我们⽤numpy从⽂本⽂件读取数据作为numpy的数组,默认的dtype是float64。
但是有些场合我们希望有些数据列作为整数。如果直接改dtype='int'的话,就会出错!原因如上,数组长度翻倍了
下⾯的场景假设我们得到了导⼊的数据。我们的本意是希望它们是整数,但实际上是却是浮点数(float64) >>> b = np.array([1., 2., 3., 4.])
>>> b.dtype
dtype('float64')
⽤astype(int) 得到整数,并且不改变数组长度
>>> c = b.astype(int)
>>> c
array([1, 2, 3, 4])
>>> c.shape
(8,)
>>> c.dtype
dtype('int32')
如果直接改变b的dtype的话,b的长度翻倍了,这不是我们想要的(当然如果你想的话)
>>> b
array([ 1.,  2.,  3.,  4.])
>>> b.dtype = 'int'
>>> b.dtype
dtype('int32')
>>> b
array([        0, 1072693248,          0, 1073741824,          0,
1074266112,          0, 1074790400])
>>> b.shape
(8,)
三、结论
numpy中的数据类型转换,不能直接改原数据的dtype!  只能⽤函数astype()。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。