【问题标题】:Why fancy indexing is not same as slicing in numpy?为什么花哨的索引与 numpy 中的切片不同?
【发布时间】:2021-04-17 04:33:55
【问题描述】:

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

据我了解,
Fancy Indexing 是:

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

问题: 为什么花式索引不作为切片符号返回?以及如何实现?


请赐教。 谢谢

【问题讨论】:

  • 我不明白你为什么期望同样的结果。 arr[ [0,1], [1,2] ] 返回一个包含两个元素的列表:第 0 行第 1 列的第一个元素和第 1 行和第 2 列的第二个元素。arr[:2, 1:] 返回包含第 0-1 行和第 1-2 列的二维子数组。这是预期的,并且记录的行为:numpy.org/doc/stable/reference/arrays.indexing.html
  • @ThomasSablik 但是当我做 arr[ [0,1] ] ~ 只传递行列表意味着与 arr[:2] 相同,所以当与列结合时它应该返回相同!跨度>
  • 2 ** 22 * 22 + 2 返回相同的结果。这是否意味着运营商***+ 总是这样做?您发现了一种特殊情况,其中精美的索引和切片返回相同的结果,但通常它们的行为不同。编程中最重要的规则之一是:不要期望任何东西。阅读文档。
  • 索引一维时,1:4 和 [1,2,3] 选择相同的东西。但在 2d 中,一对列表与切片不同。阅读完整的 numpy 索引文档。
  • @ThomasSablik,我对您的解释感到满意,但问题是当我们“切片”时,我们受限于顺序访问行或列。我的意思是 arr[:3,2:] 将遵循 0,1,2 行和 2,3 列的顺序,并且无法从中进行评估。要以手动顺序访问,我们会执行一些称为“花式索引”的操作。但是作为它的行为,我们没有得到整组行,而是得到了它们相交的值。如果我想以 row = [0,2,1] 和 col = [1,0,2] 的方式访问并想要整行和整列怎么办?我很欣赏你的回答方式。

标签: python arrays numpy indexing


【解决方案1】:

花式索引和切片的行为不同定义 / numpy规范

所以,与其质疑为什么会这样,不如:

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

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

在你的例子中:

在花式索引的情况下,为两个轴生成的索引“串联”组合(类似于zip 函数如何“串联”组合两个输入序列。(用官方@987654323的话来说@ 文档,两个索引数组“一起迭代”)。我们传递列表[0, 1] 用于索引轴0 上的数组,并传递列表[1, 2] 用于索引轴1 上的数组。索引数组[0, 1]中的索引0与索引数组[1, 2]对应索引1组合。类似地,索引1索引数组[0, 1]only与索引数组[1, 2]对应索引2组合。换句话说,索引数组做不要以多对多的方式相互结合。所有这些都是关于花哨的索引。

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

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

【讨论】:

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