我不了解以下程序的输出:
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
我在这里想念什么?
答案 0 :(得分:1)
结尾索引(0:3
和1:3
中的3是排他的,而不是包含端点的,而起始索引(0
和1
)实际上是包含端点的。如果结尾索引包含在内,则输出将与您期望的一样。但是,由于它们是排他性的,因此您实际上只抓取行0、1和2,以及列1和2。输出是它们的交集,等效于您看到的输出。
如果您要获取期望的数据,则可以执行myNumpyArray[:, 1:]
。 :
只是获取了数组的所有元素(在您的情况下,是在数组的第一维),而1:
则获取了从索引1开始的数组的所有内容,而忽略了数据在第0位。
答案 1 :(得分:0)
这是仅需要了解切片符号的经典情况。
在括号内,您具有每个尺寸的切片:
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。