代码之家  ›  专栏  ›  技术社区  ›  user2498193

尝试理解numpy数组的负索引

  •  0
  • user2498193  · 技术社区  · 6 年前

    我试图理解一些代码,但我遇到了一个3d数组中的负索引,我很困惑。

    首先是一个玩具的例子:

    import numpy as np
    mis = np.random.rand(2, 3, 4)
    
    np.sort(mis, axis=2)[:, :, -2]
    Out[428]: 
    array([[0.409, 0.406, 0.668],
           [0.806, 0.715, 0.442]])
    

    好 啊。所以在这个玩具例子中,我把-2改成了+2:

    np.sort(mis, axis=2)[:, :, 2]
    Out[429]: 
    array([[0.409, 0.406, 0.668],
           [0.806, 0.715, 0.442]])
    

    怎么回事,为什么答案是一样的?在我的真实数据中,mis在所有3个维度上的大小可能会更大,所以我想正确地理解这一点。谢谢!

    编辑:请注意,我试过mis有尺寸(2,3,20)的玩具,结果不一样-但这只是让我更困惑!

    2 回复  |  直到 6 年前
        1
  •  1
  •   Edoardo Pericoli    6 年前

    它返回相同的结果,因为-2表示从结尾开始的第二个元素,2表示从开始开始的第三个元素(第一个元素索引为零)。因此它总是返回数组的第三个元素。

    [[[0.22370153 0.26788364 **0.29264144** 0.83075949]
      [0.16376808 0.25345179 **0.26835547** 0.62549444]
      [0.37718569 0.61648076 **0.65733173** 0.68745722]]
    
    [[0.1519311  0.44252181 **0.67729233** 0.83835924]
      [0.11297116 0.11889391 **0.26749958** 0.98031619]
      [0.03599794 0.35117534 **0.88740645** 0.93831347]]]
    
        2
  •  1
  •   Mohd Kashif    6 年前

    在这个问题中,你的第三个维度的大小是4,索引为[0,1,2,3],你选择了-2索引,这意味着从最后一个开始的第二个索引基本上是从开始的第三个索引,这就是为什么两者是相同的