数组的操作
数组创建完成之后,需要对数组中数据进行访问,对数组的信息进行获取,对数组整体进行操作,接下来着重讲解对数组的操作。
1.获取数组轴的个数,在Python中轴的个数被称为秩。
NumPy中通过ndim来获取数组的轴的个数,具体示例如下所示:
In [35]: import numpy as np
In [36]: arr = np.array([[1,2,3,4],[5,6,7,8]])
In [37]: rank = arr.ndim
上述代码是获取数组轴的个数,其中In [36]是创建数组arr;In [37]是获取数组arr轴的个数并赋值给变量rank;运行结果如下所示:
In [38]: rank
Out[38]: 2
2.获取数组的维度,即行数和列数。
NumPy中通过shape来获取数组的维度,即获取数组的行数和列数,具体示例如下所示:
In [39]: import numpy as np
In [40]: arr = np.array([[1,2,3,4],[5,6,7,8]])
In [41]: shape = arr.shape
上述代码是获取数组的维度,其中In [40]是创建数组arr;In [41]是获取数组arr的维度并赋值给变量shape;运行结果如下所示:
In [42]: shape
Out[42]: (2, 4)
3.获取数组中元素个数。
NumPy中通过size来获取数组中元素的总个数,即为shape中元组元素的乘积,具体示例如下所示:
In [43]: import numpy as np
In [44]: arr = np.array([[1,2,3,4],[5,6,7,8]])
In [45]: size = arr.size
上述代码是获取数组中元素的个数,其中In [44]是创建数组arr;In [45]是获取数组arr的元素个数并赋值给变量size;运行结果如下所示:
In [46]: size
Out[46]: 8
4.获取数组中元素类型。
NumPy中通过dtype来获取数组中元素类型,其中含有不同精度数据时,以精度高的为基准,具体示例如下所示:
In [47]: import numpy as np
In [48]: arr = np.array([[1,2,3,4],[5,6,7,8]])
In [49]: arr1 = np.array([[1.0,2,3,4],[5.0,6,7,8]])
In [50]: type1 = arr.dtype
In [51]: type2 = arr1.dtype
上述代码是获取数组中元素类型,其中In [48]是创建数组arr;In [49]是创建含有浮点数和整数的数组arr1;In [50]是获取数组arr中元素类型,并赋值给变量type1;In [51]是获取数组arr1中元素类型并赋值给变量type2;运行结果如下所示:
In [52]: type1
Out[52]: dtype('int32')
In [53]: type2
Out[53]: dtype('float64')
上述运行结果中,type1为int32,而type2为float64,因此数组中元素类型根据精度高为基准确定的。
NumPy中支持多类型的数据,具体如下表所示。
类型 | 类型代码 | 说明 |
---|---|---|
int8,uint8 | i1,u1 | 有符号和无符号的8位(1个字节)整型 |
int16,uint16 | i2,u2 | 有符号和无符号的16位(2个字节)整型 |
int32,uint32 | i4,u4 | 有符号和无符号的32位(4个字节)整型 |
int64,uint64 | i8,u8 | 有符号和无符号的64位(8个字节)整型 |
float16 | f2 | 半精度浮点数 |
float32 | f4或f | 标准单精度浮点数,与C的float兼容 |
float64 | f8或d | 标准的双精度浮点数,与C的double和Python的float对象兼容 |
float128 | f16或g | 扩展精度浮点数 |
complex64,complex128 | c8,c16 | 分别用两个32位、64位或128位浮点数表示的复数 |
complex258 | c32 | 复数 |
bool | ? | 存储True和False值的布尔类型 |
object | O | Python对象类型 |
string_ | S | 固定长度的字符串类型(每个字符1个字节) |
unicode_ | U | 固定长度的Unicode类型(字节数由平台决定),与字符串的定义方式一样 |
5.访问数组。
- 访问一维数组
数组是通过索引来进行访问的,一维数组的访问具体示例如下所示:
In [54]: import numpy as np
In [55]: arr = np.array([1,2,3,4,5,6,7,8,9,10])
In [56]: a = arr[0]
In [57]: b = arr[5]
上述代码是访问一维数组,其中In [55]是创建了一个一维数组arr;In [56]是获取数组中索引值为0的数值并赋值给变量a;In [57]是获取数组中索引值为5的数值并赋值给变量b;a,b运行结果如下所示:
In [58]: a
Out[58]: 1
In [59]: b
Out[59]: 6
- 访问二维或多维数组
二维数组或多维数组也是通过索引来访问的,接下来以二维数组为例讲解二维数组或多维数组的访问,具体示例如下所示:
In [60]: import numpy as np
In [61]: arr = np.array([[1,2,3,4],[5,6,7,8]])
In [62]: a = arr[0][0]
In [63]: b = arr[1][3]
上述代码是访问二维数组,其中In [61]是创建了一个二维数组arr;In [62]是获取数组中行索引值为0且列索引值也为0,即第1行第1列(数组索引值都是从0开始的)的数值并赋值给变量a;In [63]是获取数组中行索引值为1列索引值为3,即第2行第4列的数值并赋值给变量b;a,b运行结果如下所示:
In [64]: arr
Out[64]:
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
In [65]: a
Out[65]: 1
In [66]: b
Out[66]: 8
6.数组切片
- 一维数组切片
一维数组切片与Python中列表切片类似,具体示例如下所示:
In [67]: import numpy as np
In [68]: arr = np.array([1,2,3,4,5,6,7,8,9,10])
In [69]: a = arr[1:5]
In [70]: b = arr[:5]
In [71]: c = arr[1:]
In [72]: d = arr[:]
上述代码是一维数组切片,其中In [68]是创建了一个一维数组arr;In [69]是对数组按照索引值从1到5(包括索引值1,不包括索引值5)进行切片截取并赋值给变量a;In [70]是按照索引值从数组起始位置到5(不包括索引值5)进行切片截取并赋值给变量b;In [71]是按照索引值从1到数组结尾位置(包括索引值1)进行切片截取并赋值给变量c;In [72]是切片截取整个数组并赋值给变量d;a,b,c,d运行结果如下所示:
In [73]: arr
Out[73]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [74]: a
Out[74]: array([2, 3, 4, 5])
In [75]: b
Out[75]: array([1, 2, 3, 4, 5])
In [76]: c
Out[76]: array([ 2, 3, 4, 5, 6, 7, 8, 9, 10])
In [77]: d
Out[77]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
- 二维或多维数组切片
二维数组或多维数组切片原理与上述一维数组切片类似,但整体理解可能会有一定的难度,因此本节将以二维数组为例详细讲解二维或多维数组切片,具体示例如下所示:
In [78]: import numpy as np
In [79]: arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
In [80]: a = arr[1:2,1:2]
In [81]: b = arr[1:,:2]
In [82]: c = arr[:2,1:]
In [83]: d = arr[:,:]
上述代码是访问二维数组切片,其中In [79]是创建了一个3×3的二维数组arr,In [80]是数组arr切片的索引值由两部分组成前者1:2是数组中行的切片操作,按照索引值从1到2(包括索引值1,不包括索引值2)进行行切片截取,即从截取第23行,后者1:2是数组中列的切片操作,在行切片的基础上进行列切片操作,即截取第23列,并将最终切片截取结果赋值给变量a;In [81]是数组切片的索引值同样由两部分组成,前者是从数组第2行到最后一行的行切片操作,后者是从第1列到第3列(不包括第3列)的列切片操作,并将最终切片截取结果赋值给变量b;In [82]是数组切片的索引值也是由两部分组成,前者是从数组的第1行到第3行(不包括第3行)的行切片操作,后者是从数组的第2列到最后1列的列切片操作,并将最终切片截取结果赋值给变量c;In [83]是切片截取整个二维数组;a,b,c,d运行结果如下所示:
In [84]: arr
Out[84]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [85]: a
Out[85]: array([[5]])
In [86]: b
Out[86]:
array([[4, 5],
[7, 8]])
In [87]: c
Out[87]:
array([[2, 3],
[5, 6]])
In [88]: d
Out[88]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
网友评论