[英]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
生成索引1
和2
。 但是这些生成的索引以多对多的方式组合,这与花式索引的情况不同。 因此,它们产生四种组合,而不仅仅是两种。
因此,花式索引和切片的定义语义的关键区别在于,在花式索引的情况下,花式索引 arrays 一起迭代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.