引用documentation,基本切片语法是i:j:k,其中i是起始索引,j是停止索引,k是步骤(当k > 0时)。
现在如果没有给出i,如果k > 0 则默认为0。否则,i 默认为 n - 1 for k < 0(其中 n 是数组的长度)。
如果没有给出j,则默认为n(数组长度)。
这是一个一维数组。
现在二维数组是不同的野兽。其切片语法为a[rowrange, columnrange]。
因此,如果您想要所有行,但只想要最后两列,就像您的情况一样,您可以这样做:
a[0:3, 1:3]
这里,“[0:3]”表示从 0 到 3 的所有行。“[1:3]”表示从第 1 列到第 3 列的所有列。
现在您可能想知道,即使您只有 3 列并且编号从 1 开始,它也必须返回 3 列,对吗?即:第 1 列、第 2 列、第 3 列
这是这个语法的棘手部分。第一列实际上是第 0 列。因此,当您说“[1:3]”时,您实际上是在说给我第 1 列和第 2 列。这是您想要的最后两列。 (实际上没有第 3 列。)
现在,如果您不知道矩阵有多长或者想要所有行,则可以将该部分留空。
即
a[:, 1:3]
列也一样。也就是说,如果你想说,除了第一行之外的所有列,你会写
a[0:1,:]
现在,上面的答案a[:,1:] 是如何工作的,因为当您对列说“[1:]”时,这意味着给我除了第 0 列之外的所有内容,直到所有列的末尾。即空意味着“直到最后”。
现在你必须意识到逗号两边的任何东西都是我上面第一次提到的一维情况的子集。也就是说,如果你想使用步长来指定你的行,你可以写
a[::2,1]
在你的情况下会返回
array([[2, 3],
[5, 6]])
即a[::2,1] 解释为:每隔一行给我,从最上面开始,只给我第二列。
我花了一些时间才弄清楚。所以把它粘贴在这里,以防万一它对某人有帮助。