Numpy:当您事先不知道排名时,在最后一个轴上建立索引
Posted
技术标签:
【中文标题】Numpy:当您事先不知道排名时,在最后一个轴上建立索引【英文标题】:Numpy: Indexing over the last axis when you don't know the rank in advance 【发布时间】:2017-08-12 11:09:16 【问题描述】:如果我事先不知道 Numpy 数组的排名,如何索引其最后一个轴?
这是我想做的:让a
成为一个未知等级的 Numpy 数组。我想要最后一个轴的最后一个 k
元素的切片。
如果a
是一维的,我想要
b = a[-k:]
如果a
是二维的,我想要
b = a[:, -k:]
如果a
是 3D,我想要
b = a[:, :, -k:]
等等。
无论a
的排名如何(只要排名至少为 1),我都希望它能够正常工作。
我想要示例中最后一个 k
元素的事实当然是无关紧要的,关键是当我事先不知道数组的等级时,我想为最后一个轴指定索引.
【问题讨论】:
【参考方案1】:b = a[..., -k:]
docs 中提到了这一点。
【讨论】:
有没有办法遍历最后一维的所有数组?例如,在数组a
的形状(n,)
中得到一个1 x n
列表,对于形状(n, m)
得到一个n x m
列表,对于形状(n, m, p)
得到(n*m) x p
列表,对于形状(n, m, p, r)
得到@ 987654331@名单等等……
啊!现在我也觉得自己很傻!我得到了我想要的。可以使用[a[i] for i in numpy.ndindex(a.shape[:-1])]
@JohnStrood:你应该改用a.reshape((-1, a.shape[-1]))
。这将为您提供数组而不是列表的结果,并且比手动迭代快得多。它通常会生成a
的视图,可以立即有效地完成,无需复制数据。如果你真的想要一份清单,a.reshape((-1, a.shape[-1])).tolist()
会给你一份。
另外,这种事情应该作为自己的问题发布,而不是在 cmets 上的其他问题的答案中。以上是关于Numpy:当您事先不知道排名时,在最后一个轴上建立索引的主要内容,如果未能解决你的问题,请参考以下文章