python - 为什么花式索引与 numpy 中的切片不同?

标签 python arrays numpy 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

The question: Why Fancy indexing is not returning as the slice notation? And how to achieve that?


请赐教。 谢谢

最佳答案

花哨的索引和切片的行为根据定义/根据numpy规范不同。

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

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

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

在您的示例中:

在花式索引的情况下,为两个轴生成的索引“串联”组合(类似于 zip 函数“串联”组合两个输入序列。(换句话说)根据官方 numpy 文档,两个索引数组“一起迭代”)。我们传递列表 [0, 1] 用于在轴 上索引数组0,并传递列表[1, 2]用于在轴1上索引数组。索引中的索引0数组[0, 1]与索引数组[的相应索引1组合1, 2]。同样,索引数组 [0, 1] 的索引 1 仅与 组合索引数组[1, 2]的strong>对应索引2。换句话说,索引数组组合以多对多的方式相互关联。所有这一切都与花哨的索引有关。

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

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

关于python - 为什么花式索引与 numpy 中的切片不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65680319/

相关文章:

javascript 多维数组 JSON

javascript - 内联与可观察数组的绑定(bind)

python - 使用 CFFI 的缓冲协议(protocol)

python - 如何使用 request.post 执行 Django 测试?

javascript - 如何从数组的数组中提取值

python - np.mean 的 Numba 失败

Python:从行高效创建二值图像

python - 在 Python 3.4.4 和 Linux 中安装 Numpy

python - 如何将 lambda append 到 python 中的列表?

python - 如何通过 pywt 从 wav 文件中获取 2D 小波(如 stft)?