jupyter notebook 环境
1.一维数组的索引和切片import numpy as np
a1 = np.arange(2,19)
print(a1[1]) #获取下标为1的元素
print("="*30)
#切片
print(a1[:]) #取数组中所有数
print("="*30)
print(a1[1:4]) #取左不取右
print("="*30)
print(a1[2:6:2]) # [开始索引:结束索引 : 步长 ],这三个参数都可以省略,步长默认为1
3 ============================== [ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18] ============================== [3 4 5] ============================== [4 6]2.多维数组的索引和切片
也是通过中括号来索引,在中括号中,使用逗号进行分割,逗号前是行,后是列,如果只有一个值则为行。
注意:数组的行和列的下标都是从0开始,这里假设下标为0处为第1列或第1行。
2.1 获取行a2 = np.random.randint(0,10,size=(4,6)) # 元素是从0-10之间随机的4行6列的数组
print(a2)
print("="*20)
print(a2[0]) #获取第一行
print("="*20)
print(a2[1:3]) #获取第二和第三行
print("="*20)
print(a2[[0,2,3]]) #获取第一、三、四行
某次结果如下:
[[2 8 4 4 5 3] [3 7 6 1 7 7] [2 6 7 7 8 4] [5 6 7 9 4 0]] ==================== [2 8 4 4 5 3] ==================== [[3 7 6 1 7 7] [2 6 7 7 8 4]] ==================== [[2 8 4 4 5 3] [2 6 7 7 8 4] [5 6 7 9 4 0]]2.2 获取列
a2 = np.random.randint(0,10,size=(4,6)) # 元素是从0-10之间随机的4行6列的数组
print(a2)
print("="*20)
#获取某一列
print(a2[ : ,2]) # 所有行,第三列(结果是从左到右排布,但还是列)
print("="*20)
print(a2[ : ,1:3]) #所有行,第二列到第四列(取左不取右)
print("="*20)
print(a2[ : ,[1,3]]) #所有行,第二和第四列
print("="*20)
[[3 7 1 7 8 9] [5 2 4 4 6 0] [3 0 1 1 1 2] [6 3 6 7 9 3]] ==================== [1 4 1 6] ==================== [[7 1] [2 4] [0 1] [3 6]] ==================== [[7 7] [2 4] [0 1] [3 7]]2.3 获取值
a2 = np.random.randint(0,10,size=(4,6)) # 元素是从0-10之间随机的4行6列的数组
print(a2)
print("="*20)
#获取某个数据
print(a2[1,3]) #第2行第三列(行和列下标都是从0开始,假设下标为0处为第1列或第1行)
print("="*20)
print(a2[[1,2],[2,3]])
print("="*20)
print(a2[1:3,2:4]) #行列满足第一行或第二行,第二列或第三列
[[7 2 1 1 5 0] [0 9 0 1 0 1] [6 1 6 6 5 2] [7 0 7 6 4 0]] ==================== 1 ==================== [0 6] ==================== [[0 1] [6 6]]3.布尔索引
a3 = np.arange(0,24).reshape((4,6)) #重新修改数组的维数,修改后的数组数量要和原来的一致 print(a3)
[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]]
a3 < 10
结果返回布尔值组成的数组:
array([[ True, True, True, True, True, True],
[ True, True, True, True, False, False],
[False, False, False, False, False, False],
根据布尔值取出数据
a3[a3<10] #将所有布尔值为True(即满足a3<10)的值取出
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a3[(a3<5) | (a3>10)] #取出a3<5或a3>10的数
array([ 0, 1, 2, 3, 4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23])
4.值的替换
a4 = np.arange(0,30).reshape((5,6)) print(a4)
[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23] [24 25 26 27 28 29]]
4.1 将第三行的所有值都替换成0
a4[3] = 0 print(a4)
[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [ 0 0 0 0 0 0] [24 25 26 27 28 29]]
4.2 将小于10的所有值全部都替换成2
a4变为4.1的结果
a4[a4<10] = 2 print(a4)
[[ 2 2 2 2 2 2] [ 2 2 2 2 10 11] [12 13 14 15 16 17] [ 2 2 2 2 2 2] [24 25 26 27 28 29]]
4.3 使用函数来实现
a4变为4.2的结果
a4 = np.where(a4<10,1,0) #把a4中所有小于10的数全部变成1,其余的变成0 print(a4)
[[1 1 1 1 1 1] [1 1 1 1 0 0] [0 0 0 0 0 0] [1 1 1 1 1 1] [0 0 0 0 0 0]]



