【发布时间】:2017-04-10 05:47:12
【问题描述】:
我一直在使用this reference 来了解高级索引。一个具体的例子如下;
示例 假设 x.shape 是 (10,20,30) 并且 ind 是一个 (2,3,4) 形的索引 intp 数组,那么 result = x[...,ind,:] 的形状是 (10,2,3 ,4,30) 因为 (20,) 形的子空间已被 (2,3,4) 形的广播索引子空间取代。如果我们让 i, j, k 在 (2,3,4) 形子空间上循环,则 result[...,i,j,k,:] = x[...,ind[i,j,k ],:]。此示例产生与 x.take(ind, axis=-2) 相同的结果。
我一直试图理解这一点,为了帮助我,我得到了一个生成一些数组的小脚本。我有;
Indexing arrays
i => 12 x 25
j => 12 x 25
k => 12 x 1
Input array
x => 2 x 3 x 4 x 4
Output Array
Cols => 2 x 12 x 25
我用来制作Cols的代码如下;
cols = x[:, k, i, j]
根据我对示例 cols 的理解,实际上应该具有形状 (2 x 12 x 1 x 12 x 25 x 12 x 25)。我是这样来的;
它的原始尺寸是 2 x 3 x 4 x 4
2 不变,但所有其他维度都改变了
将 3 替换为 k,一个 12 x 1 的数组
前 4 个被 i 替换,一个 12 x 25 的数组
第二个 4 被 j 代替,也是一个 12 x 25 的数组
显然我在这里误解了一些东西,我哪里出错了?
【问题讨论】:
-
也来自该文档部分:
Advanced indexes always are broadcast and iterated as one:相反,您是单独应用它们。