理解NumPy数组的切片

2024-04-27 23:36:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我还不明白以下程序的输出:

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

我错过了什么?你知道吗


Tags: import程序numpyasnp逻辑arrayprint
2条回答

这是一个只需要理解切片表示法的典型案例。你知道吗

在括号内,每个维度都有一个切片:

arr[dim1_start:dim1_end, dim2_start, dim2_end]

对于上面的表示法,切片将包括从dimX_start开始的元素,直到dimX_end,但不包括。你知道吗

所以,对于你写的:myNumpyArray[0:3, 1:3]

您选择了行0, 1, and 2 (not including 3)和列1 and 2 (not including 3)


我希望这有助于解释你的结果。你知道吗


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

print(myNumpyArray[0:4, 1:4])

有关切片的更多信息,您可以访问numpy docs或查看不久前发布的a similar question。你知道吗

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

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

相关问题 更多 >