假设我有;
LIST = [[array([1, 2, 3, 4, 5]), array([1, 2, 3, 4, 5],[1,2,3,4,5])] # inner lists are numpy arrays
我尝试转换;
array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5])
我现在正在通过 vstack 上的迭代来解决它,但是对于特别大的 LIST 来说它真的很慢
您对最有效的方法有何建议?
原文由 erogol 发布,翻译遵循 CC BY-SA 4.0 许可协议
通常,您可以沿任意轴连接整个数组序列:
但是您 确实 需要担心列表中每个数组的形状和维数(对于 2 维 3x5 输出,您需要确保它们已经都是 2 维 n×5 数组)。如果要将一维数组串联为二维输出的行,则需要扩展它们的维度。
正如 Jorge 的回答所指出的,numpy 1.10 中还引入了函数
stack
:这采用了互补的方法:它创建了每个输入数组的新视图并添加了一个额外的维度(在本例中,在左侧,因此每个
n
元素 1D 数组变为 1n
by----
二维数组)在连接之前。它仅在所有输入数组具有相同形状时才有效。vstack
(或等效的row_stack
)通常是一种更易于使用的解决方案,因为它将采用一维和/或二维数组序列,并在必要时自动扩展维数并且仅在必要时才将整个列表连接在一起。在需要新尺寸的地方,将其添加到左侧。同样,您可以一次连接整个列表而无需迭代:语法快捷方式
numpy.r_[ array1, ...., arrayN ]
(注意方括号)也展示了这种灵活的行为。这对于连接一些明确命名的数组很有用,但对您的情况不利,因为此语法不接受数组序列,例如LIST
。还有一个类似的函数
column_stack
和快捷方式c_[...]
,用于水平(按列)堆叠,以及一个 几乎 类似的函数hstack
-though5for-thoughf549559出于某种原因,后者不太灵活(它对输入数组的维数更严格,并尝试端到端连接一维数组而不是将它们视为列)。最后,在一维数组垂直堆叠的特定情况下,以下内容也适用:
…因为数组可以由一系列其他数组构成,在开头添加一个新的维度。