3.2.1-NumPy数据类型概述.md

3.2.1 NumPy数据类型概述

3.2.1 NumPy数据类型概述

NumPy数组(ndarray)是存放同类型数据的核心对象,同一个数组中的每一个元素都属于同一种数据类型,该类型由属性dtype记录。在3.1.2节中,dtype已作为数组常用属性出现;本节进一步说明NumPy支持哪些数据类型,以及创建数组时如何查看和指定。课程列出的常用数据类型有四类:整数类型(int8、int16、int32、int64)、无符号整数类型(uint8、uint16、uint32、uint64)、浮点数类型(float16、float32、float64)以及复数类型(complex64)。类型名中的数字表示每个元素占用的比特数,例如int32每个整数占32位,float64每个浮点数占64位。位宽越大,可表示的数值范围或精度越高,占用的内存也越多。

如果创建数组时不指定数据类型,将由系统自动确定。例如用np.arange(6)创建整数序列,课程示例中a.dtype为dtype('int32');用np.random.rand(3)生成[0,1)均匀分布的随机数,b.dtype为dtype('float64')。也可以通过参数dtype在创建时指定类型:np.arange(6, dtype=np.int16)得到int16数组;np.array([1.1, 2.3, 3.4], dtype=np.float32)得到float32数组。查看类型时写成数组对象.dtype,不必加括号。

import numpy as np
a = np.arange(6)
print(a.dtype)
b = np.random.rand(3)
print(b.dtype)
c = np.arange(6, dtype=np.int16)
print(c.dtype)
d = np.array([1.1, 2.3, 3.4], dtype=np.float32)
print(d.dtype)

使用中要注意三点。第一,dtype描述的是元素的数据类型,不是数组对象本身的Python类型,后者要用type(数组)查看。第二,未指定dtype时由系统自动确定,同一段代码在不同运行环境可能得到int32或int64,课程按int32讲解;若输入数据中出现小数,系统通常会把整个数组定为浮点类型。第三,创建时用dtype参数指定类型,与下一节的astype()转换不是同一回事:astype()返回新数组、不改变原数组;从高精度转到低精度(如float64转int32)可能丢失精度,需要慎重。选择类型时,整数序列多用int,随机小数和一般科学计算多用float64,内存紧张或数据范围明确时可改用int16、float32等更窄的类型。

关键要点

下载此文件