3. 索引与切片
3.1 一维数组
>>> import numpy as np
>>> arr1 = np.arange(9)
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
# 取值一个数据
>>> print(arr1[0])
0
# 取多个值
>>> print(arr1[1:-1])
[1 2 3 4 5 6 7]
>>> print(arr1[::-1])
[8 7 6 5 4 3 2 1 0]
>>> print(arr1[1:7:3])
[1 4]
注意点:
- 取单个数据,取下标,下标从0开始
- 取多个数据,
:
隔开,左闭右开 - 参考列表
[起始位置:终点位置:步长]
,左闭右开
3.2 多维数组
>>> arr2
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
# 单独的一行
>>> arr2[1]
array([3, 4, 5])
# 取连续多行
>>> arr2[1:3,:]
array([[3, 4, 5],
[6, 7, 8]])
# 取不连续多行
>>> arr2[[0,2],]
array([[0, 1, 2],
[6, 7, 8]])
# 单独的一列
>>> arr2[0:3,1]
array([1, 4, 7])
# 取连续多列
>>> arr2[:,1:3]
array([[1, 2],
[4, 5],
[7, 8]])
# 取不连续多列
>>> arr2[:,[0,2]]
array([[0, 2],
[3, 5],
[6, 8]])
# 练习
>>> arr2
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>>arr2[[0,2],[0,2]]
array([0, 8])
>>>arr2[0:2,][:,1:3]
array([[1, 2],
[4, 5]])
3.3 条件索引
>>> arr2
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> arr2>3
array([[False, False, False],
[False, True, True],
[ True, True, True]])
>>>arr2[arr2>3]
array([4, 5, 6, 7, 8])
注意点:返回所有条件为真的数据,组成了一个一维数组
>>> arr2
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
# 非
>>> arr2[~(arr2>3)]
array([0, 1, 2, 3])
# 与
>>> arr2[(arr2%2==0)&(arr2>3)]
array([4, 6, 8])
# 或
>>> arr2[(arr2>3)|(arr2%2!=0)]
array([1, 3, 4, 5, 6, 7, 8])
>>> arr3 = np.array([0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,])
>>> arr3[arr3==1]
array([1])