何时使用“.flat”、“.flatiter”或“.flatten()”

Posted

技术标签:

【中文标题】何时使用“.flat”、“.flatiter”或“.flatten()”【英文标题】:When to use '.flat', '.flatiter' or '.flatten()' 【发布时间】:2015-08-11 22:32:15 【问题描述】:

什么时候适合使用三个展平参数'.flat'/'.flatiter'/'.flatten'中的哪一个?我知道'.flat'在数组上返回一个一维迭代器,这是否意味着数组保留在原始形状中,并且可以使用单个索引访问数组中的每个元素(例如,即使使用单个 for 循环数组可能是高维的)。 '.flatten' 会返回原始数组的完整副本,该数组被展平为一维数组。

哪个资源占用较少?

【问题讨论】:

【参考方案1】:

flatiter 只是flat (docs) 返回的迭代器对象的类型。所以你只需要知道它是一个和其他迭代器一样的迭代器。

很明显,flatten 会消耗更多的内存和 cpu,因为它会创建一个新数组,而 flat 只创建迭代器对象,速度非常快。

如果您只需要以平面方式迭代数组,请使用flat

如果您需要一个实际的平面数组(用于显式迭代之外的其他目的),请使用flatten

【讨论】:

ravel - 一个视图。想想flatten 没有副本。 别忘了reshape(-1)

以上是关于何时使用“.flat”、“.flatiter”或“.flatten()”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TBSTYLE_FLAT 在 MFC CToolBar 上正确显示静态文本?

使用泛型制作 Array.flat(1) 的 Typescript 包装器

openGL之API学习(二零二)glsl的smooth flat

异形水晶玻璃平底石(Flat Backs No Hotfix)草图编号汇总。

Kendo ui mobile将默认主题设置为flat ui

OpenStack-12-增加flat网段