day01-切片和索引

day01-切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中list 的切片操作一样。

ndarray数组可以基于0-n的下标进行索引

在这里插入图片描述

  • 注意,数组切片并不像列表切片会重新开辟一片空间,而是地址引用,需要使用.copy()进行复制。
array = np.array([0,1,2,3,4,5,6,7,8,9])
ar1 = array[2:7:2]
#ar1为array([2,4,6])

在这里插入图片描述

特点:左闭右开【 } 用法同列表切片

多维切片

ar4 = array([[0,1,2,3],
      [4,5,6,7],
      [8,9,10,11],
      [12,13,14,15]])

ar4.ndim
#返回ar4的秩(几维)输出2

ar4[2]
#切片为下一维度的一个元素,所以是一维数组
#输出array([8,9,10,11])

ar4[2][2]
#输出10

ar4[2:]
#输出第2行以后的
array([[8,9,10,11],
	   [12,13,14,15]])
  • 切片还可以用省略号表示"…",如果在行位置使用省略号,那么返回值将包含所有行元素,反之,则包含所有列元素
ar4[...,1]
#取第一列1,5,9,13

ar4[...,1:]
#返回第二列后的所有项
"""
1,2,3
5,6,7
9,10,11
13,14,15
"""

#注意
ar4[1,2] 
ar4[1][2]
#一个是切片一个是取索引

ar4[...][1]
#取了所有行再取第二行
#区别于
ar4[...,1]

获取四个脚上的元素组成2*2

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]]  #取b[0][0],b[0][2],b[3][0],b[3][2]组成数列即b【【行号集】【列号集】】

r = np.array([[0,0],[3,3]]).reshape(4)
l =  np.array([[0,2],[0,2]]).reshape(4)
s = b[r,l].reshape((2,2))

s
a = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9],
])
#行取得2行和3行,列取得2列和3列
b = a[1:3,1:3]  #等价于b = a[[1,2],[1,2]]
#1:3 == [1,2]

c = a[1:3,[1,2]]
#...表示所有行,1:表示从第二列开始的所有列
d = a[...,1:]

print(b)
print(c)
print(d)

创建一个下图的数列

在这里插入图片描述

z = np.zero((8,8),dtype = int)
z[1::2,::2] = 1
z[::2,1::2] = 1
z

2.布尔数组索引

当输出的结果需要经过布尔运算(如比较运算)时,此时回事用到另一种高级索引方式,即布尔数组索引

返回数组中大于6的所有元素

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

联系

1.提取所有奇数

2.将奇数值修改为-1

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

x[x%2==1]

x[x%2==1] = -1

筛选出指定区间的数据

  • & 和
  • | 或
x = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
#以上x中大于4并且大于9的所有元素
x[(x<4)&(x<9)]
#以上x中大于4或者大于9的所有元素
x[(x<4)|(x<9)]

True和False的形式表示需要和不需要的数据

a = np.array(12).reshape((3,4))
array([		  [0,1,2,3],
              [4,5,6,7],
              [8,9,10,11]        
			])
row1 = np.array([False,True,True])  
a[row1]		#第一行不要,第二行要,第三行要
#相当于 a[[1,2],:]

得到:

array([       [4,5,6,7],
              [8,9,10,11]        
			])
column = np.array([True,False,True,False])
a[:,column]
#相当于 a[:,[0,2]]

得到:

array([       [0,4,8],
              [2,6,10]        
			])
a[row1,column]
#a[[False,True,True],[True,False,True,False]]
#注意前后的帧需要一样,True的个数需要保持一致,不一致会报错
#等价于:
a[[1,2],[0,1]]

当需要选择的行数和列数不一致时,如选择第一行和最后一行的1,3,4列

a[[0,-1],[0,2,3]]

上述方法错误!形状不一样

1.先选行再选列,即先读取数组a的第一列和最后一列,保存到temp中然后再筛选相应的列即可

#第一步:先选行
temp = a[[0,-1],:]

#第二部再选列
temp[:,[0,2,3]]

#合并一条
a[[0,-1],:][:,[0,2,3]]

一行和最后一行的1,3,4列

a[[0,-1],[0,2,3]]

上述方法错误!形状不一样

1.先选行再选列,即先读取数组a的第一列和最后一列,保存到temp中然后再筛选相应的列即可

#第一步:先选行
temp = a[[0,-1],:]

#第二部再选列
temp[:,[0,2,3]]

#合并一条
a[[0,-1],:][:,[0,2,3]]
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值