numpy 中的索引和切片
Indexing and slicing in numpy
x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
x.shape
(2,3,1)
x[1:3]
array([[[4],
[5],
[6]]])
我预计 x[1:4] 会出现错误,因为索引超出范围,但它给出了可能的输出。
>>> "hi"[1:500]
'i'
Python 将调整切片的末尾以匹配序列的末尾:索引 2-499 处没有更多条目,因此它仅在索引 1 处停止。
>>> "what"[3000:]
''
它还会限制切片的开头以匹配序列的结尾:索引 3000 处没有条目,因此返回空字符串。
与你的情况相同:x[1] == [[4],[5],[6]]]
,但 x[2:3]
是一个空序列,所以你得到 [[[4],[5],[6]]]] + []
== [[[4],[5],[6]]]]
.
区间索引是Numpy的行为。如果您提供单个索引(超出范围),则会引发错误。例如:
x = np.array([1, 2, 3, 4, 5, 6])
x[7]
如果你想同时引发错误和间隔索引,你可以使用 Numpy take:
a = [4, 3, 5, 7, 6, 8]
indices = range(3, 7)
np.take(a, indices)
以上两种情况,Numpy 都会报错
x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
x.shape
(2,3,1)
x[1:3]
array([[[4],
[5],
[6]]])
我预计 x[1:4] 会出现错误,因为索引超出范围,但它给出了可能的输出。
>>> "hi"[1:500]
'i'
Python 将调整切片的末尾以匹配序列的末尾:索引 2-499 处没有更多条目,因此它仅在索引 1 处停止。
>>> "what"[3000:]
''
它还会限制切片的开头以匹配序列的结尾:索引 3000 处没有条目,因此返回空字符串。
与你的情况相同:x[1] == [[4],[5],[6]]]
,但 x[2:3]
是一个空序列,所以你得到 [[[4],[5],[6]]]] + []
== [[[4],[5],[6]]]]
.
区间索引是Numpy的行为。如果您提供单个索引(超出范围),则会引发错误。例如:
x = np.array([1, 2, 3, 4, 5, 6])
x[7]
如果你想同时引发错误和间隔索引,你可以使用 Numpy take:
a = [4, 3, 5, 7, 6, 8]
indices = range(3, 7)
np.take(a, indices)
以上两种情况,Numpy 都会报错