【问题标题】:Flattening an array of matrices to a single matrix (python)将矩阵数组展平为单个矩阵(python)
【发布时间】:2019-04-28 21:42:15
【问题描述】:

我有一个矩阵列表:

arr = [array([[1, 2, 3], [7, 8, 9]]), array([[4, 5, 6], [0, 0, 1]])]

我想通过以下方式将它们展平:

[[1, 2, 3], [7, 8, 9], [4, 5, 6], [0, 0, 1]]

numpy.flatten 将其扁平化为单个数字数组。 我试过这个:flattened_list = [y for x in arr for y in x] 它完成了这项工作,但矩阵的所有行都是 numpy 数组。 有没有办法将 numpy 数组展平到一定深度?

【问题讨论】:

  • np.reshape(arr,(-1,max([a.shape[-1] for a in arr])))np.concatenate(arr)?
  • @Divakar 太棒了!谢谢:)

标签: python arrays numpy flatten


【解决方案1】:

你应该使用重塑:

out = arr.reshape((4,3))

【讨论】:

  • arr 是一个列表,没有 reshape 方法。
【解决方案2】:

你想要的是 numpy 的 vstack 函数。它接受一个 ndarray 元组并返回一个新的 ndarray,这是将它们垂直堆叠的结果,第一个 ndarray 在顶部,依此类推。

例如:

import numpy as np

>>> a = np.array([1, 2])
>>> b = np.array([3, 4])
>>> c = np.array([5, 6])
>>> np.vstack(a, b)
array([[1, 2],
       [3, 4],
       [5, 6]])

在您的情况下,您可以轻松调用 ndarrays 列表中的 tuple 函数

>>> arr = [array([[1, 2, 3], [7, 8, 9]]), array([[4, 5, 6], [0, 0, 1]])]
>>> np.vstack(tuple(arr))
array([[1, 2, 3],
       [7, 8, 9],
       [4, 5, 6],
       [0, 0, 1]])

如果您希望您的答案是一个 python 列表,那么只需在结果上调用 numpy 的 ndarray.tolist 函数,如下所示:

>>> np.ndarray.tolist(np.vstack(arr))
[[1, 2, 3], [7, 8, 9], [4, 5, 6], [0, 0, 1]]

【讨论】:

    猜你喜欢
    • 2022-10-07
    • 1970-01-01
    • 2018-09-20
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多