当前位置: 首页 > 面试题库 >

如何将numpy数组列表转换为单个numpy数组?

尉迟宪
2023-03-14
问题内容

假设我有;

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来说确实很慢

您对最佳有效方法有何建议?


问题答案:

通常,您可以沿任意轴连接整个数组序列:

numpy.concatenate( LIST, axis=0 )

但你
必须对列表中的形状和每个阵列的维度担心(用于2维3x5的输出,你需要确保它们都是2维正由-5阵列的话)。如果要将一维数组连接为二维输出的行,则需要扩展其维数。

正如Jorge的答案所指出的那样,stack在numpy 1.10中引入了function :

numpy.stack( LIST, axis=0 )

这采用了补充方法:在连接之前,它会为每个输入数组创建一个新视图并添加一个额外的维数(在这种情况下为左侧,因此每个n元素1D数组都将变为1 x
n2D数组)。仅当所有输入数组都具有相同的形状时才有效(即使沿串联轴也是如此)。

vstack(或等价的row_stack)通常是一个更易于使用的解决方案,因为它将采用一维和/或二维数组序列,并在将整个列表连接在一起之前,在必要时且仅在必要时自动扩展维数。在需要新尺寸的地方,将其添加到左侧。同样,您可以一次串联整个列表,而无需进行迭代:

numpy.vstack( LIST )

语法快捷方式numpy.r_[ array1, ...., arrayN ](请注意方括号)也表现出这种灵活的行为。这对于连接几个显式命名的数组很有用,但对您的情况不利,因为此语法将不接受数组序列,例如your LIST

对于水平(列)堆栈,还有一个类似的函数column_stack和快捷方式c_[...],以及一个 几乎
类似的函数,hstack尽管出于某种原因,后者的灵活性较差(它对输入数组的维数更为严格,并试图进行串联)一维数组首尾相连,而不是将其视为列)。

最后,在垂直堆叠一维数组的特定情况下,以下内容也适用:

numpy.array( LIST )

…因为数组可以从其他数组序列中构造出来,因此在开头增加了新的维度。



 类似资料:
  • 问题内容: 我使用一个外部模块(libsvm),该模块不支持numpy数组,仅支持元组,列表和字典。但是我的数据是二维二维数组。我如何以pythonic方式转换它,也就是没有循环。 问题答案: 您可以简单地将矩阵转换为,以证明:

  • 问题内容: 我正在尝试将代表黑白图像的2D Numpy数组转换为3通道OpenCV数组(即RGB图像)。 基于代码示例和文档,我正尝试通过Python执行此操作,例如: 但是,对CvtColor()的调用将引发以下cpp级异常: 我究竟做错了什么? 问题答案: 您的代码可以固定如下: 简短说明: 数据类型不受OpenCV的支持(它支持,,,,,,) 无法处理numpy数组,因此必须将两个参数都转换

  • 问题内容: 我在与要转换为numpy数组的视频相同的文件夹中有一个python脚本。我的视频称为“ test.mp4”。 在我的脚本中,我想调用并返回一个numpy数组。所得的numpy数组应为图像的numpy数组,其中每个图像均为3-d numpy数组。 那有意义吗? 谢谢! 问题答案: 下面的脚本可以满足您的需求。您可以将它的一部分分成函数。 下面的代码不检查错误,特别是生产代码将检查每个变量

  • 问题内容: 注意: 这要求与通常的元组到数组的转换相反。 我必须将一个参数传递给(包装的c ++)函数作为嵌套元组。例如,以下作品 而以下 不 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该阵列的尺寸始终为2xN,这可能会很大。 有没有简单的方法可以将其转换为元组?我知道我可以循环遍历,创建一个新的元组,但是如果numpy数组提供了一些不错的访问权限,我会更喜欢。 如果不可能如我所愿

  • 问题内容: 我想将图像转换为NumPy数组再转换为PySide QPixmap,因此可以显示它(在PySide UI中编辑:)。我已经找到了此工具:qimage2ndarray,但它仅适用于PyQt4。我试图对其进行更改以使其能够与PySide一起使用,但是我将不得不更改该工具的C部分,并且我没有使用C的经验。我该怎么做?或者有其他选择吗? 问题答案: 一种选择是仅使用PIL库。 您可以在http

  • 问题内容: 我有一个RGB图像。我想将其转换为numpy数组。我做了以下 它创建一个没有形状的数组。我假设它是一个iplimage对象。 问题答案: 您可以使用较新的OpenCV python接口(如果我没记错的话,自Ope​​nCV 2.2起就可以使用)。它本机使用numpy数组: 结果: