在numpy中进行索引和切片 [重复]。

问题描述 投票:0回答:1
x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
x.shape
(2,3,1)
x[1:3]
array([[[4],
    [5],
    [6]]])

我希望在x[1:4]中出现错误,因为索引超出了边界,但它给出的输出是如何实现的。

python numpy numpy-ndarray numpy-slicing
1个回答
0
投票
>>> "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]]]].


1
投票

对于区间索引,这是Numpy的行为。如果你给出一个单一的索引(超出范围),它将引发错误。例如,如果你想同时拥有引发错误和区间索引,你可以使用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都会发出错误提示。

© www.soinside.com 2019 - 2024. All rights reserved.