Datawhale Numpy组队学习Task02打卡

it2026-08-14  10

Datawhale Numpy组队学习Task02打卡

索引与切片

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

整数索引

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

import numpy as np # 一维数组: x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) print(x[2]) # 3 # 二维数组: 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[2]) # [21 22 23 24 25] print(x[2][1]) # 22 print(x[2, 1]) # 22

切片索引

切片操作是指抽取数组的一部分元素生成新数组。对 python 列表进行切片操作得到的数组是原数组的副本,而对 Numpy 数据进行切片操作得到的数组则是指向相同缓冲区的视图。

通过[start : end : step]切片方式可以方便地提取一段数据,其中start为开始读取位置的索引,end为结束读取位置的索引(不包含end位,step为采样步长。

切片方式意义start : end : step从start开始读取到end(不含end),步长为stepstart : end从start开始读取到end(不含end),步长为1start :从start开始读取完后续所有元素,步长为1start : : step从start开始读取完后续所有元素,步长为step: end : step从0开始读取到end(不含end),步长为step: end从0开始读取到end(不含end),步长为1: : step步长为step采样: :读取所有元素:读取所有元素

特别地,step可以为负数。例如当step = -1时,start : end : -1表示从start开始,逆序读取至end结束(不包含end),索引号end<=start。

dots索引

为了避免出现像x[:,:,:,1]这样过多冒号的情况,可以使用…符号表示取多个维度上所有的数据,其中维度的数量需根据规则自动推断:当切片方式出现…符号时,…符号左边的维度将自动对齐到最左边,…符号右边的维度将自动对齐到最右边,此时系统再自动推断…符号代表的维度数量,它的切片方式总结如下所示:

切片方式意义a,⋯,ba维度对齐到最左边,b维度对齐到最右边,中间的维度全部读取,其他维度按a/b的方式读取a,⋯a维度对齐到最左边,a维度后的所有维度全部读取,a维度按a方式读取。这种情况等同于a索引/切片方式⋯,bb维度对齐到最右边,b之前的所有维度全部读取,b维度按b方式读取⋯读取所有元素

整数数组索引

方括号内传入多个索引值,可以同时选择多个元素。 例:

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, -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] # [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]]) # 获取了 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]] #可以借助切片: 与整数数组组合。 y = x[0:3, [1, 2, 2]] print(y) # [[12 13 13] # [17 18 18] # [22 23 23]]

可以达到和切片类似效果的函数:numpy. take(a, indices, axis=None, out=None, mode=‘raise’) 示例:

import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) 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, -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]) print(y) # [False False False False False True True True] print(x[x > 5]) # [6 7 8]

github学习地址

最新回复(0)