切片和索引
[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)