繁体   English   中英

为什么花哨的索引与 numpy 中的切片不同?

[英]Why fancy indexing is not same as slicing in numpy?

我一直在学习花式索引,但是当我观察到以下代码的行为时,我有几个问题......

据我了解,
花式索引是:

ndArray[ [0,1,2] ]即传递行/列列表

切片是:
ndArray[ 0:3 ]即给出一系列行/列


现在,问题

一个 numpy 阵列,

arr = [ [1,2,3],
        [4,5,6],
        [7,8,9] ]

当我尝试花式索引时:

arr[ [0,1], [1,2] ]
>>> [2, 6]

切片的时候,

arr[:2, 1:]
>>> [ [2, 3],
      [5, 6] ]

本质上,它们都应该返回二维数组,因为它们的含义相同,因为它们可以互换使用!

:2 should be equivalent to [0,1]           #For rows
1: should be equivalent to [1,2]           #For cols

问题:为什么花式索引没有作为切片表示法返回? 以及如何实现这一目标?


请赐教。 谢谢

花式索引和切片根据定义/ numpy规范表现不同。

因此,与其质疑为什么会这样,不如这样做:

  • 能够识别/区分/区分它们(即,清楚地了解索引何时变成花哨的索引,以及何时切片)。

  • 请注意它们的语义(结果)的差异。

在您的示例中:

In the case of fancy indexing, the indices generated for the two axes are combined "in tandem" (similar to how the zip function combines two input sequences "in tandem". (In the words of the official numpy documentation, the two index arrays是“一起迭代”)。我们传递列表[0, 1]用于索引轴0上的数组,并传递列表[1, 2]用于索引轴1上的数组。索引数组中的索引0 [0, 1]与索引数组[1, 2]对应的索引1组合,同样,索引数组[0, 1]的索引1与索引数组[1, 2]对应的索引2组合[1, 2] . 换句话说,索引 arrays并没有以多对多的方式相互结合。所有这些都是关于花哨的索引。

在切片的情况下,为轴 0 指定的切片:2在概念上为轴0生成索引 ' 0 ' 和 '1' ; 切片1:为轴1指定概念上为轴1生成索引12 但是这些生成的索引以多对多的方式组合,这与花式索引的情况不同。 因此,它们产生四种组合,而不仅仅是两种。

因此,花式索引和切片的定义语义的关键区别在于,在花式索引的情况下,花式索引 arrays 一起迭代

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM