1、查看数据类型
通过访问数组的dtype属性时会创建一个表示数据类型的对象, 这个对象其实就是numpy.dtype类型的对象。
如果要想获取数组中元素数据类型的名称,则需要先通过数组访问dtype属性得到numpy. dtype类型的对象,再通过该对象访问name属性进行获取,示例代码如下:
arr_one=np.array([[1,2,3],[4,5,6]])
arr_one.dtype.name
输出:'int32'
在上述代码中,首先通过array()函数创建了一个数组arr_one,然后通过arr_one访问dtype属性获取数据类型对象,通过该对象访问name属性获取数据类型的名称。
从上述结果中可以看出,数组中元素的数据类型是int32。从数据类型的命名方式上可以看出,NumPy的数据类型是由一个类型名和元素位长的数字组成,例如,int32的int是类型名, 32是元素位长的数字。
如果在创建数组时,没有显式地指明数据的类型,那么解释器会根据列表或元组中元素的类型推导出来。默认情况下,通过zeros()、ones()、empty()函数创建的数组中元素的数据类型为float64。以下为NumPy数组常用的数据类型。
数据类型 | 说 明 | 简 写 |
bool | 布尔类型,值为True或False | b |
int8、uint8 | 有符号和无符号的8位整数 | i、u |
int16、uint16 | 有符号和无符号的16位整数 | i2、u2 |
int32、uint32 | 有符号和无符号的32位整数 | i4、u4 |
int64、uint64 | 有符号和无符号的64位整数 | i8、u8 |
float16 | 半精度浮点数(16位,其中正负号1位,指数5位,精度10位) | f2 |
float32 | 单精度浮点数(32位,其中正负号1位,指数8位,精度23位) | f4 |
float64 | 双精度浮点数(64位,其中正负号1位,指数11位,精度52位) | f8 |
complex64 | 复数,分别用两个32位浮点数表示实部和虚部 | c8 |
complex128 | 复数,分别用两个64位浮点数表示实部和虚部 | c16 |
object_ | Python对象 | o |
string_ | 固定长度的字符串类型 | s |
unicode_ | 固定长度的unicode类型 | u |
2、转换数据类型
NumPy中提供了astype()方法可以将数组中元素的数据类型转换为其他数据类型。例如,将数组中元素的数据类型由整数转换为浮点数,示例代码如下:
>>> data =np.array([[1,2,3],[4,5,6]])
>>> data.dtype.name
输出:'int32'
>>> float_data =data.astype(np.float32) #将数据类型转换为float32
>>> float_data.dtype.name
输出:'float32'
上述代码中,数组中元素的数据类型由int32转换为float32。若需要将元素的类型由浮点数类型转换为整数类型,则会将浮点数中小数点后面的部分截掉,具体示例代码如下:
>>> float_data =np.array([1.2,2.9,3.5])
>>> float_data
输出:array([1.2, 2.9, 3.5])
>>> int_data =float_data.astype(np.int32) #将数据类型转换为int32
>>> int_data
输出:array([1, 2, 3])
通过比较上述两个结果可以看出,无论浮点数小数点后面的数字是多少,转换成整数后都会被截掉。如果数组中的元素是字符串,且字符串中的每个字符都是数字,则也可以使用astype()方法将字符串转换为数值类型。例如,将数组中元素的类型由字符串类型转换为整数类型,具体代码如下:
>>> str_data=np.array(['1','2','3'])
>>> int_data=str_data.astype(np.int64)
>>> int_data
输出:array([1, 2, 3], dtype=int64)
3、数组的索引方式
NumPy数组支持索引和切片操作,且提供了比Python序列更丰富的索引功能,它除了可以使用基本的整数索引之外,还可以使用花式索引和布尔索引访问数组中的元素。
(1)数组的索引方式
数组是通过索引的方式标记元素的位置,数组的类型不同,索引方式也会有一些区别。下面以一维数组和二维数组为例,介绍这两种类型数组的索引方式。
-
一维数组的索引方式
一维数组与Python中序列类型的结构类似,它们的索引方式是相同的。正向索引从左向右依次递增,即左边数第一个元素的索引是0,第二个元素的索引是1,依此类推;反向索引从右向左依次递减,即从右边数第一个元素的索引是-1,第二个元素的索引是-2,依此类推。一维数组的索引方式如下图所示。
从图中可以看出,数组中每个元素对应两种索引,分别是正向索引和反向索引。如果想要从数组中获取元素0,则需要使用正向索引7或反向索引-3进行获取。
-
二维数组的索引方式
二维数组比一维数组要复杂一些,它里面的每个元素对应行索引和列索引,其中行索引和列索引可以是正向索引,也可以是反向索引。二维数组的索引方式如下图所示。
在上图中,二维数组是一个5行5列的数组,每个元素有行索引和列索引,此时通过行索引或列索引获取某行或某列元素。如果想获取二维数组中的单个元素,必须同时指明这个元素对应的行索引和列索引。例如,元素13可以使用行索引-3或2和列索引-3或2获取。