导入 NumPy 库:
In [1]:
import numpy as np #导入NumPy库 np.__version__ #打印numpy版本
Out[1]:
'1.24.2'
2.2: NumPy数组的切片和索引操作
NumPy数组ndarray对象的内容可以通过索引或切片来访问和修改。
- NumPy数组索引操作是通过下标取某一个元素
- NumPy数组切片操作是通过下标取某一段元素,即对操作的数组截取其中一部分生成新数组
Python字符串、列表、元组都支持切片操作。同样NumPy数组可以基于0-n的下标进行索引,可以通过内置的slice函数,并设置start,stop及step参数,从原数组中切割出一个新数组。
注意NumPy数组索引和切片的区别:
- 索引是通过下标取某一个元素,会降维度。
- 切片是通过下标取某一段元素,得到的结果仍然是数组,带有 冒号: 则表示对该维执行切片操作
2.2.1: 一维数组切片和索引操作
创建一个范围为[10,30),步长为1的一维数组,注意arange方法创建数组时,不包括第二个参数stop的值30,也就是包头不包尾。
In [2]:
arr2_1_1 = np.arange(10,30) arr2_1_1
Out[2]:
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
该数组包含的元素个数为:
In [3]:
arr2_1_1.size
Out[3]:
20
索引操作:
数组的下标也是从0开始计数,用整数0-19作为下标可以索引该数组中的某个元素:
通过数组下标2进行索引得到对应值12
In [4]:
arr2_1_1[2]
Out[4]:
12
通过数组下标19进行索引得到对应最后一个值29
In [5]:
arr2_1_1[19]
Out[5]:
29
通过slice函数执行切片操作
slice()函数返回slice对象(切片),slice对象用于指定如何对切片对象进行裁剪。
语法: slice(start, end, step)
In [6]:
s1 = slice(3,10,2) # 从索引3开始到索引9停止,不包括结束位置的索引9,步长为2 arr2_1_1[s1]
Out[6]:
array([13, 15, 17, 19])
slice函数的第一个参数为起始索引下标,第二个参数为终止索引下标(但不包括),第三个参数为步长。 所以arr2_1[s1]表示从arr2_1[3]开始索引,步长为2,arr2_1[9]终止索引,但不包括arr2_1[9]。
更简洁的切片方式是,通过对数组用冒号分隔切片参数start:stop:step,形成数组名[start:stop:step]结构进行切片操作,同样是不包含下标stop的索引
In [7]:
arr2_1_1
Out[7]:
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
In [8]:
arr2_1_1[3:9:2]
Out[8]:
array([13, 15, 17])
arr2_1_1[3:9:2]表示从arr2_1_1[3]开始索引,步长为2,arr2_1_1[9]终止索引,但不包括arr2_1_1[9]。
其中的三个参数可以缺省:
- 若start缺省,表示从下标0开始索引,结构为数组名[:stop:step]
- 若stop缺省,表示索引到结束元素,结构为数组名[start::step]
- 若step缺省,表示索引步长默认为1,结构为数组名[start:stop]
- 若start和step缺省,表示从下标0开始索引,步长默认为1,结构为数组名[:stop]
- 若stop和step缺省,表示索引到结束元素,步长默认为1,结构为数组名[start::]
- 若start和stop缺省,表示从下标0开始索引到结束元素