导入模块创建两个用于实验的数组

import numpy as np
x=np.arange(10)#定义一个一维数组
X=np.arange(15).reshape(3,5)#定义一个三行五列的二维数组

基础索引

一维数组的索引

类似于python中list的索引

print(x)
print(x[0],x[3],x[4])#索引指定下标的内容
print(x[2:4])#切片,索引指定范围下标的内容
print(x[:4])#切片
print(x[3:])#切片
print(x[2:-1])#切片
print(x[-1])#切片
print(x[:-1])#切片

运行结果:
在这里插入图片描述

二维数组的索引

print(X)
print(X[0,1])#分别用行坐标和纵坐标,实现行列的筛选
print(X[2])#省略后续索引值,返回数据为降低一个维度的数组,筛选第二行(第0行为起始)
print(X[:2])#筛选多行,左闭右开
print(X[:2,2:4])#先筛选多行,再筛选多列
print(X[:,2])#筛选所有行,在筛选多列

运行结果:
在这里插入图片描述
注意:切片会改变数组原来的值,因为Numpy经常要处理大数组,避免每次重复

如:

print(x)
x[2:4]=520
print(x)
X[:2,1:3]=520
print(X)

运行结果:
在这里插入图片描述

神奇索引

就是用整数数组进行索引

一维数组的索引

print(x)
index=np.array([[0,2],[1,3]])#索引x中的[0,2]和[1,3]元素构成的数组
print(x[index])

运行结果:
在这里插入图片描述
例子:获取数组中最大的前n个数字

arr=np.random.randint(1,100,10)#随机生成1-100之间的,10个数字
print(arr)
print(arr.argsort())#arr.argsort()会返回排序(从小到大)后的索引index
print(arr.argsort()[-3:])#取最大值对应的三个下标
print(arr[arr.argsort()[-3:]])#取最大值对应的三个值

运行结果:
在这里插入图片描述

二维数组的索引

arr2=np.random.randint(1,100,(4,5))#随机生成1-100之间的,四行五列的数组
print(arr2)
print(arr2[[0,2]])#筛选多行(0和2行),列可以省略
print(arr2[[0,2],3])#筛选0行3列,2行3列值
print(arr2[:,[0,1,3]])#晒选多列,行不能省略
print(arr2[[0,2,3],[2,3,4]])#查询0行2列,2行3列,3行4列的值,行列值个数要对应,否则报错

运行结果:
在这里插入图片描述

布尔索引

注意:布尔索引选择的数据是数组的拷贝

一维数组的索引

print(x)
print(x>5)#索引x>5的值,并用布尔值返回
print(x[x>5])#索引出x>5的元素
x[x<5]+=20#将小于5的值加上20
print(x)

运行结果:
在这里插入图片描述

例子:把一堆数组进行01化处理,用于实际问题简单化

print(x)
x[x<5]=0#将x小于5的用0表示
x[x>=5]=1#将x大于等于5的用1表示
print(x)

运行结果:
在这里插入图片描述

二维数组的索引

print(X)
print(X>5)#X>5是布尔型数组,既有行,也有列,因此返回的是(行,列)一堆结果
print(X[X>5])#索引出大于5的元素值

运行结果:
在这里插入图片描述
例子:把第三列大于五的行筛选出来

print(X)
print(X[X[:,3]>5])
print(X)

运行结果:
在这里插入图片描述
将大于5的元素赋其他值

X[X[:,3]>5]=520#将第三列大于5的所有行赋值520
print(X)
print(X[X[:,3]>5])

运行结果:
在这里插入图片描述

条件的组合

注意:每个条件都得加小括号

print(x)
condition1=(x%2==0)&(x>5)#x整除2且x>5
condition2=(x%3==1)|(x<4)#x除3的余数为1或x<4
print(x[condition1])
print(x[condition2])

运行结果:
在这里插入图片描述

整理不易,看完请点个赞吧=-=!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐