数据型态
因为 NumPy 是主要作为数据计算的函数库,因此 NumPy 里面的数据型别具有比 Python 内建的数据型别更高的精度,也可以更方便的将数组数据转换为指定的型态,这篇教学将会介绍 NumPy 的数据型态以及相对应的转换方式。
快速导览:
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
数据型态的种类
NumPy 的数据型态有下列几种 ( 参考 NumPy 官方说明文件 ):
| 种类 | 代替字串 | 说明 |
|---|---|---|
| bool | ? | boolean 布尔值。 |
| int | i | (signed) integer 带有符号的整数 ( 正负整数 ),等同 int64。 |
| int8 | i1 | 整数 -128~127。 |
| int16 | i2 | 整数 -32768~32767。 |
| int32 | i4 | 整数 -2147483648~2147483647。 |
| int64 | i8 | 整数 -9223372036854775808~9223372036854775807。 |
| uint | u | unsigned integer 无有符号的整数 ( 正整数 ),等同 uint64。 |
| uint8 | u1 | 正整数 0~255。 |
| uint16 | u2 | 正整数 0~65535。 |
| uint32 | u4 | 正整数 0~4294967295。 |
| uint64 | u8 | 正整数 0~18446744073709551615。 |
| float | f | floating-point 浮点数,等同 float64。 |
| float16 | f2 | 半精度浮点数。 |
| float32 | f4 | 单精度浮点数。 |
| float64 | f8 | 双精度浮点数。 |
| complex | c | complex floating-point 浮点类型复数,等同 complex128。 |
| complex64 | c8 | 双 32 位复数。 |
| complex128 | c16 | 双 64 位复数。 |
| object | O | object 对象。 |
| byte | b | (signed) byte 带有符号的比特。 |
| ubyte | B | unsigned byte 无符号的比特。 |
| unicode | U | Unicode。 |
| S | (byte-)string 字串。 | |
| m | timedelta 时间间隔。 | |
| M | datetime 日期时间。 | |
| V | void 原始数据。 |
转换数据型态
NumPy 在定义数组时,可以透过 dtype 指定数据的型态,就能将数组内的所有数据转变成对应的型态 ( 注意,如果有遇到无法互相转换的型态,会发生错误 ),下方的范例,会将原始数组 a 的数据,转换成不同型态的数组。
import numpy as np
a = np.array([1.1, 2.2, 3.3, 0, -1])
b = np.array(a, dtype='?')
c = np.array(a, dtype='U')
d = np.array(a, dtype='S')
e = np.array(a, dtype='B')
f = np.array(a, dtype='i')
print(a) # [ 1.1 2.2 3.3 0. -1. ]
print(b) # [ True True True False True]
print(c) # ['1.1' '2.2' '3.3' '0.0' '-1.0']
print(d) # [b'1.1' b'2.2' b'3.3' b'0.0' b'-1.0']
print(e) # [ 1 2 3 0 255]
print(f) # [ 1 2 3 0 -1]
如果是透过 astype 的方法,则可以将现有的数组进行数据型态的转换,下方的范例会将整数数组,转换成浮点数数组。
a = np.array([1, 2, 3, 4], dtype="int32")
b = a.astype('float32')
print(a) # 1, 2, 3, 4
print(b) # 1., 2., 3., 4,
结构化转换型态
除了单纯的转换数据型态,也可透过“结构化”的方式,让数组中同时具有不同型态的数据,下方的例子,会将会将数据转换成对应的型态。
import numpy as np
dt = np.dtype([('a','U5'),('b','f'),('c','?')])
a = np.array([(1.1,2.2,3.3), (1.1,2.2,3.3)], dtype=dt)
print(a) # [('1.1', 2.2, True) ('1.1', 2.2, True)]
取得数据型态
使用 NumPy 定义的数组,都可以使用 dtype 的方法来查看该数组的数据类型,下方的例子会印出不同数据类型数组的 dtype。
import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([1,2,3,4,5], dtype='U10')
print(a.dtype) # int64
print(b.dtype) # <U10
微信扫码关注
抖音扫码关注