【DataWhale】numpy组队学习(二)

索引与切片
数组索引机制指的是用方括号([])加序号的形式引用单个数组元素,它的用处很多,比如抽取元素,选取数组的几个元素,甚至为其赋一个新值

整数索引要获取数组的单个元素,指定元素的索引即可。

切片索引切片操作是指抽取数组的一部分元素生成新数组。对 python 列表进行切片操作得到的数组是原数组的副本,而对 Numpy 数据进行切片操作得到的数组则是指向相同缓冲区的视图。如果想抽取(或查看)数组的一部分,必须使用切片语法,也就是,把几个用冒号( start:stop:step )隔开的数字置于方括号内。为了更好地理解切片语法,还应该了解不明确指明起始和结束位置的情况。如省去第一个数字,numpy 会认为第一个数字是0;如省去第二个数字,numpy 则会认为第二个数字是数组的最大索引值;如省去最后一个数字,它将会被理解为1,也就是抽取所有元素而不再考虑间隔。
【例】对二维数组切片
import numpy as np x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])print(x[0:2])# [[11 12 13 14 15]# [16 17 18 19 20]]print(x[1:5:2])# [[16 17 18 19 20]# [26 27 28 29 30]]print(x[2:])# [[21 22 23 24 25]# [26 27 28 29 30]# [31 32 33 34 35]]print(x[:2])# [[11 12 13 14 15]# [16 17 18 19 20]]print(x[-2:])# [[26 27 28 29 30]# [31 32 33 34 35]]print(x[:-2])# [[11 12 13 14 15]# [16 17 18 19 20]# [21 22 23 24 25]]print(x[:])# [[11 12 13 14 15]# [16 17 18 19 20]# [21 22 23 24 25]# [26 27 28 29 30]# [31 32 33 34 35]]print(x[2, :]) # [21 22 23 24 25]print(x[:, 2]) # [13 18 23 28 33]print(x[0, 1:4]) # [12 13 14]print(x[1:4, 0]) # [16 21 26]print(x[1:3, 2:4])# [[18 19]# [23 24]]print(x[:, :])# [[11 12 13 14 15]# [16 17 18 19 20]# [21 22 23 24 25]# [26 27 28 29 30]# [31 32 33 34 35]]print(x[::2, ::2])# [[11 13 15]# [21 23 25]# [31 33 35]]print(x[::-1, :])# [[31 32 33 34 35]# [26 27 28 29 30]# [21 22 23 24 25]# [16 17 18 19 20]# [11 12 13 14 15]]print(x[:, ::-1])# [[15 14 13 12 11]# [20 19 18 17 16]# [25 24 23 22 21]# [30 29 28 27 26]# [35 34 33 32 31]]

通过对每个以逗号分隔的维度执行单独的切片,你可以对多维数组进行切片。因此,对于二维数组,我们的第一片定义了行的切片,第二片定义了列的切片。

【例】import numpy as np x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])print(x)# [[11 12 13 14 15]# [16 17 18 19 20]# [21 22 23 24 25]# [26 27 28 29 30]# [31 32 33 34 35]]x[0::2, 1::3] = 0print(x)# [[11 0 13 14 0]# [16 17 18 19 20]# [21 0 23 24 0]# [26 27 28 29 30]# [31 0 33 34 0]]

dots索引NumPy 允许使用… 表示足够多的冒号来构建完整的索引列表。比如,如果 x 是 5 维数组:1. x[1,2,…] 等于 x[1,2,:,:,:]2. x[…,3] 等于 x[:,:,:,:,3]3. x[4,…,5,:] 等于 x[4,:,:,5,:]
【例】7.4整数数组索引【例】方括号内传入多个索引值,可以同时选择多个元素。import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8])r = [0, 1, 2]print(x[r])# [1 2 3]r = [0, 1, -1]print(x[r])# [1 2 8]x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])r = [0, 1, 2]print(x[r])# [[11 12 13 14 15]# [16 17 18 19 20]# [21 22 23 24 25]] r = [0, 1, -1]print(x[r])# [[11 12 13 14 15]# [16 17 18 19 20]# [31 32 33 34 35]]r = [0, 1, 2]c = [2, 3, 4]y = x[r, c]print(y)# [13 19 25]【例】import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8])r = np.array([[0, 1], [3, 4]])print(x[r])# [[1 2]# [4 5]]x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])r = np.array([[0, 1], [3, 4]])print(x[r])# [[[11 12 13 14 15]# [16 17 18 19 20]]## [[26 27 28 29 30]# [31 32 33 34 35]]]# 获取了 5X5 数组中的四个角的元素。# 行索引是 [0,0] 和 [4,4],而列索引是 [0,4] 和 [0,4]。r = np.array([[0, 0], [4, 4]])c = np.array([[0, 4], [0, 4]])y = x[r, c]print(y)# [[11 15]# [31 35]]【例】可以借助切片: 与整数数组组合。import numpy as np x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])y = x[0:3, [1, 2, 2]]print(y)# [[12 13 13]# [17 18 18]# [22 23 23]]1. numpy. take(a, indices, axis=None, out=None, mode=‘raise’) Take elements from an array along an axis.【例】import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8])r = [0, 1, 2]print(np.take(x, r))# [1 2 3]r = [0, 1, -1]print(np.take(x, r))# [1 2 8]x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])r = [0, 1, 2]print(np.take(x, r, axis=0))# [[11 12 13 14 15]# [16 17 18 19 20]# [21 22 23 24 25]]r = [0, 1, -1]print(np.take(x, r, axis=0))# [[11 12 13 14 15]# [16 17 18 19 20]# [31 32 33 34 35]]r = [0, 1, 2]c = [2, 3, 4]y = np.take(x, [r, c])print(y)# [[11 12 13]# [13 14 15]]

布尔索引我们可以通过一个布尔数组来索引目标数组。【例】import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8])y = x > 5print(y)# [False False False False False True True True]print(x[x > 5])# [6 7 8]x = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])y = np.logical_not(np.isnan(x))print(x[y])# [1. 2. 3. 4. 5.] x = np.array([[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25],[26, 27, 28, 29, 30],[31, 32, 33, 34, 35]])y = x > 25print(y)# [[False False False False False]# [False False False False False]# [False False False False False]# [ True True True True True]# [ True True True True True]]print(x[x > 25])# [26 27 28 29 28 30 31 32 33 34 35]【例】import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi, 50)y = np.sin(x)pri

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值