使用Numpy进行索引是反转的

时间:2015-03-15 12:45:34

标签: python arrays numpy indexing

我正在忙着阅读Wes Mckinney的Python for Data Analysis,我遇到了下面的例子,这有点令人困惑。它适用于将多个索引数组传递给np数组。

鉴于以下np.array

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]
 [24 25 26 27]
 [28 29 30 31]] 

当我们使用以下值对数组执行花式索引时

arr[[1, 5, 7, 2], [0, 3, 1, 2]]

以下结果

array([ 4, 23, 29, 10]) 

这不是我所期望的>我知道它应该返回一个与每个实例组相对应的元素数组。它返回的实际值让我感到困惑。

我认为它应该返回的元组是(0,1),(5,3),(7,1),(2,2)

应该返回[4,没有这样的元素,没有这样的元素,10]

我到底错过了什么?

1 个答案:

答案 0 :(得分:3)

当您为2D数组中的第一个元素arr编制索引时,您将获得第一行:

In [119]: arr = np.array([[0,1,2],[3,4,5]])

In [120]: arr
Out[120]: 
array([[0, 1, 2],
       [3, 4, 5]])

In [123]: arr[0]
Out[123]: array([0, 1, 2])

在NumPy-lingo中," 0轴"因此与arr的行相关联。另请注意arr与列表列表

之间的紧密关联
In [126]: lol = [[0,1,2],[3,4,5]]

In [127]: lol[0]
Out[127]: [0, 1, 2]

当然,对于列表列表,lol[0]应该返回第一个,即[0, 1, 2],这是完全合理的。 arr[0]的行为方式相同 - 它返回的内容类似于

同样,如果沿第二轴切片,则会得到一列。

In [125]: arr[:, 0]
Out[125]: array([0, 3])

通常,索引的顺序与轴的顺序匹配。首先是0轴,第二个是1轴,依此类推。

因此在2D数组中,0轴与行相关联,1轴与行相关联 与列相关联。

如果您正在考虑沿x轴和y轴排列的数组元素,这可能看起来倒退了。在几何中,x轴通常指向右侧,y轴指向垂直方向。因此,在几何中,坐标(x,y)首先给出水平索引,然后给出垂直索引。

索引数组时,由于上面显示的原因,关联会反转。