【无标题】

文章详细介绍了如何使用Numpy库对一维和二维数组进行切片、索引操作,包括指定开始和结束索引、步长以及反向取值。同时,讲解了布尔索引的概念,用于选取满足特定条件的数组元素,并展示了如何通过逻辑运算符(&,|)组合多个条件。最后,提到了行列选择的注意事项和数组复制以避免原数组被修改的情况。
摘要由CSDN通过智能技术生成

切片和索引

[2]第二个元素
[2:],从该索引开始以后所有的项都被提取
[2:7],提取索引从2到6的项,依旧左闭右开
[:7]从索引0开始,取到6

一位数组

#一位数组
ar1=np.arange(10)
ar1
#切片 [开始:结束:步长],还是左闭右开
#从索引2开始到索引8结束,间隔2
ar2=ar1[2:8:2]
ar2

ar3=np.arange(1,20,2)
ar3[2:]
ar3[2:7]
ar3[:7]
ar3[::-1]#反向取

二维数组

行操作

ar4_5=np.arange(20).reshape(4,5)
ar4_5
#第三行数据
ar4_5[2]
#第三行第三列
ar4_5[2][2]
#第三行后面所有行
ar4_5[2:]

列操作

#第二列数据,取列时第一个元素是:表示是取所有行
ar4_5[:,1]
#取第二列后所有列
ar4_5[:,1:]
#返回第二行和第三列
ar4_5[1,2]==ar4_5[1][2]#理解不同,后面表示先取第二行,再取第三个元素
#取第二行,先取所有行,再取其中第二行
ar4_5[:][1] 

高级操作

x=np.array([
    [1,2],
    [3,4],
    [5,6]
])
y=x[[0,1,2],[0,1,0]]#表示分别取出来x中的(0,0)、(1,1)和(2,0)的数据
y


b=np.array([
    [0,1,2],
    [3,4,5],
    [6,7,8],
    [9,10,11]
])
a=b[[0,0,3,3],[0,2,0,2]]
a

c=b[1:3,1:3]
c
#::2表示从0到结束,步长为2
#:表示冒号前面为0,后面为结束,如果在行的位置上:表示所有行,:2表示第一行到第二行,在列的位置上也一样,全称是X:X,X省略分别为0和终点
z=np.zeros((8,8),dtype=int)
z[1::2,::2]=1
z[::2,1::2]=1
z

布尔索引

#布尔索引
x=np.array([
    [0,1,2],
    [3,4,5],
    [6,7,8],
    [9,10,11]
])
x[x>6]#布尔类型为True的所有值

#取出数组中所有奇数值
x[x%2==1]
#将奇数值修改为-1
x[x%2==1]=-1
x


#逻辑运算符&和|
x=np.array([
    [0,1,2],
    [3,4,5],
    [6,7,8],
    [9,10,11]
])
x[(x<4)|(x>9)]
x[(x>4)&(x<9)]

False和True

#False和True
a3_4=np.arange(12).reshape(3,4)
a3_4
row1=np.array([False,True,True])
column1=np.array([True,False,True,False])
a3_4[row1]#先选行
a3_4[:,column1]#再选列
a3_4[row1,column1]#等同于下面
a3_4[[1,2],[0,2]]#和上面等同


行列不匹配时报错

#索引个数不匹配,会报错
row2=np.array([False,True,True])
column2=np.array([True,True,True,False])
a3_4[row2,column2]#行列不匹配

#第一行和最后一行的第1,3,4列
a3_4[[0,-1],[0,2,3]]#行列不匹配和上面一样会报错
temp=a3_4[[0,-1],:]#行列不匹配时先选行
temp[:,[0,2,3]]#再选列
#合并为1条
a3_4[[0,-1],:][:,[0,2,3]]

索引或者切片会改变原数组

#索引或者切片会改变原数组
ar=np.arange(10)
ar[5]=10
ar[7:9]=200
print(ar)

#可以复制操作
ar1=np.arange(10)
b=ar.copy()
#或者b=np.array(ar1)
b[7:9]=200
print(ar1)
print(b)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值