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:当您事先不知道排名时,在最后一个轴上建立索引的主要内容,如果未能解决你的问题,请参考以下文章

2020-005 pandas与numpy中的字符串处理

使用 scipy 计算矩阵排名

发布操作时在 Facebook 时间轴上获取“应用名称”

HTML 和 BeautifulSoup:当结构并不总是事先知道时如何迭代解析?

第三维上的堆栈矩阵numpy [重复]

单击窗口 x 轴的末端时,通过鼠标单击在 OpenGL 中创建的光线不正确?