我们注意到,花哨的索引和切片的混合使用对于多维数组来说是如此令人困惑和未记录在案,例如:

In [114]: x = np.arange(720).reshape((2,3,4,5,6))

In [115]: x[:,:,:,0,[0,1,2,4,5]].shape
Out[115]: (2, 3, 4, 5)

In [116]: x[:,:,0,:,[0,1,2,4,5]].shape
Out[116]: (5, 2, 3, 5)

我在https://numpy.org/doc/stable/user/basics.indexing.html上读过花式索引的用法,我能理解这x[:,0,:,[1,2]] = [x[:,0,:,1], x[:,0,:,2]].然而,我不明白为什么上面Input [115]Input [116]的结果不同于on the first dimension.谁能指出这样的广播规则被记录在哪里?

谢谢!

我已经try 在文档中搜索花哨的索引,并在Github上的NumPy repo上发布问题.

推荐答案

索引操作分为两个部分,由基本索引(不包括整数)定义的子空间和来自高级索引部分的子空间.需要区分两种索引组合的情况:

  • 高级指数由切片、省略号或新指数分隔.例如x[arr1,:,arr2].
  • 先进的指数都是紧挨着的.例如x[...,arr1,arr2,:],而不是x[arr1,:,1],因为1是这方面的高级索引.

在第一种情况下,高级索引操作产生的维度在结果数组中排在第一位,子空间维度在此之后.在第二种情况下,来自高级索引操作的维度被插入到结果数组中与它们在初始数组中相同的位置(后一种逻辑使简单的高级索引行为类似于切片).

https://numpy.org/doc/stable/user/basics.indexing.html#combining-advanced-and-basic-indexing

在您的第一个示例中,在第四维和第五维中有高级索引(高级索引在两个维度中"相邻").在第二个示例中,有一个切片操作(基本索引)将您的两个高级索引分开.

Python相关问答推荐

如何从. text中进行pip安装跳过无法访问的库

Django关于UniqueBindition的更新

Flask主机持续 bootstrap 本地IP| Python

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

使用Beautiful Soup获取第二个srcset属性

使文本输入中的文本与标签中的文本相同

DataFrame groupby函数从列返回数组而不是值

在Python Attrs包中,如何在field_Transformer函数中添加字段?

ODE集成中如何终止solve_ivp的无限运行

Python解析整数格式说明符的规则?

numpy卷积与有效

如何让这个星型模式在Python中只使用一个for循环?

Asyncio:如何从子进程中读取stdout?

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

如何在达到end_time时自动将状态字段从1更改为0

python—telegraph—bot send_voice发送空文件

在Python中使用yaml渲染(多行字符串)

在matplotlib中使用不同大小的标记顶部添加批注

干燥化与列姆化的比较

Gekko中基于时间的间隔约束