【问题标题】:Indexing and slicing in numpy [duplicate]numpy中的索引和切片[重复]
【发布时间】:2020-05-12 09:33:04
【问题描述】:
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】:
    >>> "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]]]]

    【讨论】:

      【解决方案2】:

      对于区间索引,它是 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 都会报错

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        相关资源
        最近更新 更多