多个高级索引会导致维度重新排序

时间:2017-06-29 17:58:04

标签: python arrays numpy

假设我有一个numpy数组。使用单个高级索引时,行为符合预期。

>>> import numpy as np
>>> A = np.random.rand(4, 4, 4)
>>> A[:, :, 0].shape
(4, 4)
>>> A[:, :, [0, 1]].shape
(4, 4, 2)

但是,添加其他索引时,会更改维度的顺序。

>>> A[0, :, [0, 1]].shape
(2, 4)

有趣的是,当使用切片而不是单个索引时,原始数组排序将被保留

>>> A[0:1, :, [0, 1]].shape
(1, 4, 2)

因此,如果我需要保留A的维度,我必须进行两次索引操作或转置结果。

>>> A[0, :, :][:, [0, 1]].shape
(4, 2)   

经过一些谷歌搜索后,我发现了一个描述正在发生的事情的page in the numpy manual

总结有关高级索引的部分,显然1被视为高级索引。因为高级索引并不是彼此相邻的,所以没有“明确的位置”来放置维度,因此它被添加到开头。

那么为什么在与其他高级索引结合使用时,单个数字被视为高级索引,而切片不是?

我理解为什么使用多个列表或数组作为索引会使得知道放置额外维度的位置变得模糊不清,但是当其中一个是列表而另一个是数字时,为什么它会模糊不清?

0 个答案:

没有答案