Python的numpy数组的行索引与切片的区别

看《深度学习图解》的第6章的代码,前后对于矩阵的索引操作代码略有区别。心中疑问重重,为何两者都能工作。带着疑问,网上查阅了一些资料,基本搞清楚两种索引的不同。下面形成文档,以便彻底学习numpy.array的相关用法(以二维数组为例)。

在python IDLE Shell 创建一个2维数组(6×3,6行3列,18个元素)

streetlights = np.array([[1, 0, 1],

                        [0, 1, 1],

                        [0, 0, 1],

                        [1, 1, 1],

                        [0, 1, 1],

                        [1, 0, 1]])

创建代码:

创建数组

取第一行:

  • 方法1: streetlights[0]

  • 方法2: streetlights[0:1] 或streetlight[0:1:1]或streetlight[0:1:1,:]

运行过程及结果如下图所示,都能正确地读取到第1行。但是,注意,方法1返回的是向量。方法2返回的是矩阵。

image.png

分析如下:

  1. 方法1采用“行索引”对数据进行选取,行号由0开始。我的理解是每行作为一个元组,存储在一个一维数组里。其索引如同一维数据的索引类似。

  2. 方法2采用切片方式索引。语法是array[begin:end:step, begin:end:step]。演示代码只关注行,列关键词可以省略(默认为选中所有列数据)。step默认为1,从begin开始取,但不包括end。

读第一行和第二行

以下切片只取奇数行数据,2表示隔行取数据(结果是矩阵)。


读奇数行(结果是矩阵)

以下切片只取偶数行数据(结果是矩阵):

读偶数行(结果是矩阵)

参考:
Fururur. 在python&numpy中切片(slice).https://www.cnblogs.com/Sinte-Beuve/p/6573246.html

你可能感兴趣的:(Python的numpy数组的行索引与切片的区别)