一维数组的索引和切片
如果数组是一维的,那么索引和切片就是跟 python 的列表是一样的。
import numpy as np
#1. 一维数组的索引和切片
a1 = np.arange(10)
print(a1)
#1.1 索引操作
print(a1[4])
#1.2 进行切片操作 与Python列表索引一致
print(a1[4:6])
#1.3 使用步长
print(a1[::2])
#1.4 使用负数作为索引
print(a1[-1])
out: [0 1 2 3 4 5 6 7 8 9]
4
[4 5]
[0 2 4 6 8]
多维数组的索引和切片
如果是多维的(这里以二维为例),那么在中括号中,给两个值,两个值是通过逗号分隔的,逗号前面的是行,逗号后面的是列。如果中括号中只有一个值,那么就是代表的是行。
#2. 多维数组
# 也是通过中括号来索引和切片,在中括号中使用,分割逗号前面的是行后面的是列
# 如果多维数组中只有一个值 那么这个值就是行
a2 = np.random.randint(0,10,size=(4,6))
print(a2)
out:[[0 4 9 5 6 8]
[8 4 1 6 8 1]
[2 6 6 9 8 4]
[5 4 5 1 3 7]]
# a2[0]#取第一行
# a2[1:3] #第一行和第二行
a2[[0,2,3]] # 获取不连续023行的数据
out: array([[0, 4, 9, 5, 6, 8],
[2, 6, 6, 9, 8, 4],
[5, 4, 5, 1, 3, 7]])
a2[2,1]#获取第二行第一列
out: 6
#获取不连续的行和列
a2[[1,2],[4,5]]#获取第一行第四列 你二行第五列
out: array([8, 4])
#获取连续的行和列
a2[1:3,4:6]
out: array([[8, 1],
[8, 4]])
#获取某一列的数据
a2[:,1] #所有行都要取第一列
out: array([4, 4, 6, 4])
布尔索引
布尔索引是通过相同数组上的 True 还是 False 来进行提取的。提取的条件可以有多个,那么如果有多个,可以使用&来代表且,|用来代表或,如果有多个条件,那么每个条件要使用圆括号括起来
#布尔索引
a2 = np.arange(24).reshape((4,6)) # reshape数组变形
print(a2)
out: [[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
以布尔值为例会筛选出对应的元素
a2 < 10
out: array([[ True, True, True, True, True, True],
[ True, True, True, True, False, False],
[False, False, False, False, False, False],
[False, False, False, False, False, False]])
a2[a2<10] # 布尔索引 数组中小于10的元素
out: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a2[(a2<5) | (a2>10)] # a2<5 或者a2>10 或关系
out: array([ 0, 1, 2, 3, 4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23])
数组值替换的三种方式
a3 = np.random.randint(0,10,size=(3,5)) #生成三行五列范围在0-10之间不包括10的数组
a3
out: array([[6, 4, 2, 1, 6],
[3, 1, 5, 4, 4],
[9, 6, 4, 8, 2]])
第一种方式 选中行替换
a3[1]= 0 #选中行进行替换
a3
out: array([[6, 4, 2, 1, 6],
[0, 0, 0, 0, 0],
[9, 6, 4, 8, 2]])
a3[1] = np.array([1,2,3,4,5]) #替换对等元素 数量一定要和原来的数组数量一致
a3
out: array([[6, 4, 2, 1, 6],
[1, 2, 3, 4, 5],
[9, 6, 4, 8, 2]])
第二种方式 使用条件索引实现
a3[a3<3]= 1 #所有小于3的全部设置为1 选中范围
a3
out: array([[6, 4, 1, 1, 6],
[1, 1, 3, 4, 5],
[9, 6, 4, 8, 1]])
第三种方式 使用函数实现
result = np.where(a3<5,0,1) # a3小于5的是0 a3>5的是1 where函数指定范围
print(result)
[[1 0 0 0 1]
[0 0 0 0 1]
[1 1 0 1 0]]