看《深度学习图解》的第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采用“行索引”对数据进行选取,行号由0开始。我的理解是每行作为一个元组,存储在一个一维数组里。其索引如同一维数据的索引类似。
方法2采用切片方式索引。语法是array[begin:end:step, begin:end:step]。演示代码只关注行,列关键词可以省略(默认为选中所有列数据)。step默认为1,从begin开始取,但不包括end。
读第一行和第二行
以下切片只取奇数行数据,2表示隔行取数据(结果是矩阵)。
读奇数行(结果是矩阵)
以下切片只取偶数行数据(结果是矩阵):
读偶数行(结果是矩阵)