numpy数据类型
数字代表该类型数据占据的bit数
bool_ | 布尔(True或False) |
---|---|
int8 | 整数( − 2 8 2 t o 2 8 2 − 1 -\frac{2^{8}}{2} to \frac{2^{8}}{2}-1 −228to228−1)即(-128 to 127) |
int16 | 整数( − 2 16 2 t o 2 16 2 − 1 -\frac{2^{16}}{2} to \frac{2^{16}}{2}-1 −2216to2216−1)即(-32768 to 32767) |
int32 | 整数( − 2 32 2 t o 2 32 2 − 1 -\frac{2^{32}}{2} to \frac{2^{32}}{2}-1 −2232to2232−1)即(-2147483648 to 2147483647) |
int64 | 整数( − 2 64 2 t o 2 64 2 − 1 -\frac{2^{64}}{2} to \frac{2^{64}}{2}-1 −2264to2264−1)即(-9223372036854775808 to 9223372036854775807) |
uint8 | 无符号整数(0 to 255) |
uint16 | 无符号整数(0 to 65535) |
uint32 | 无符号整数(0 to 4294967295) |
uint64 | 无符号整数(0 to 18446744073709551615) |
float16 | 半精度浮点数,1个符号位,5个指数位,10个尾数位 |
float32 | 单精度浮点数,1个符号位,8个指数位,23个尾数位 |
float64 | 双精度浮点数,1个符号位,11个指数位,52个尾数位 |
complex64 | 复数,双32位浮点数(实部和虚部部分) |
complex128 | 复数,双64位浮点数(实部和虚部部分) |
对于float16,
2
10
=
1
0
3.01
2^{10}=10^{3.01}
210=103.01,所以其对应十进制小数精确的小数位数为3位;
对于float32,
2
23
=
1
0
6.9
2^{23}=10^{6.9}
223=106.9,所以其对应十进制小数精确的小数位数为6位;
对于float64,
2
52
=
1
0
15.6
2^{52}=10^{15.6}
252=1015.6,所以其对应十进制小数精确的小数位数为15位。
float32的存储方式如图:
将一个float型转化为内存存储格式的步骤为:
(1)先将这个实数的绝对值化为二进制格式。
(2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。
(3)从小数点右边第一位开始数出二十三位数字放入第22到第0位。
(4)如果实数是正的,则在第31位放入“0”,否则放入“1”。
(5)如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。
(6)如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。
如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。
numpy数据类型强制转换
查看数据类型:array.dtype
转换:array.astype('float64)
numpy数据保存和加载
二进制文件
只保存数据不保存形状和元素类型a.tofile('a.bin)
读入时需要指定元素类型b=np.fromfile('a.bin’,dtype=np.int32)
npy文件
保存:np.save('a.npy',a)
读取:c=np.load('a.npy')
txt和csv等文件
保存:np.savetxt('a.txt' ,a,fmt='%d')
读取:np.loadtxt('a.txt',dtype='int')