Python 理解NumPy阵列的切片

Python 理解NumPy阵列的切片,python,numpy,slice,Python,Numpy,Slice,我还没有理解以下程序的输出: import numpy as np myList = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] myNumpyArray = np.array(myList) print(myNumpyArray[0:3, 1:3]) 输出 [[ 2 3] [ 6 7] [10 11]] 我所知道的是

我还没有理解以下程序的输出:

import numpy as np

myList = [[1,   2,  3,  4],
          [5,   6,  7,  8],
          [9,  10, 11, 12],
          [13, 14, 15, 16]]

myNumpyArray = np.array(myList)

print(myNumpyArray[0:3, 1:3])
输出

[[ 2  3]
 [ 6  7]
 [10 11]]
我所知道的是所有行和第二到第四列的交点。在该逻辑中,输出应为:

 2   3  4
 6   7  8
10  11 12
14  15 16

我在这里遗漏了什么?

这是一个只需要理解切片表示法的经典案例

在括号内,有每个标注的切片:

arr[dim1\u开始:dim1\u结束,dim2\u开始,dim2\u结束]
对于上述表示法,切片将包括从
dimX\U开始
dimX\U结束
的元素

那么,对于您所写的:
myNumpyArray[0:3,1:3]

您选择了行
0、1和2(不包括3)
和列
1和2(不包括3)


我希望这有助于解释你的结果


对于您期望的结果,您需要更像:

print(myNumpyArray[0:4,1:4])
有关切片的更多信息,您可以访问或查看前一段时间发布的。

结束索引(0:3和1:3中的3)是独占的,不包括在内,而开始索引(
0和
1
)实际上包括在内。如果结束索引是包含的,那么输出将如您所期望的那样。但因为它们是独占的,所以实际上只获取第0行、第1行和第2行以及第1列和第2列。输出是这些的交集,这相当于您看到的输出


如果您试图获取所需的数据,可以执行
myNumpyArray[:,1:]
只抓取数组的所有元素(在您的例子中,是数组的第一维度),而
1:
抓取从索引1开始的数组的所有内容,忽略第0位的数据

0:3
表示选择从
0
3-1=2
的所有行,
1:3
表示选择从
1
3-1=2
的所有列。您需要关心未包含的最后一个值。这可能有助于您复制