【问题标题】:Put entries of numpy matrix of differing column length into a 1D array将不同列长度的numpy矩阵的条目放入一维数组中
【发布时间】:2017-05-21 22:06:26
【问题描述】:

我正在使用 Python。我有一个长度为 L 的 numpy 数组,称为“arr”arr = np.empty(L, dtype = object),其中 arr 的每个条目都包含另一个 numpy 数组,但 每个都有不同的长度(这就是我使用 dtype = object 的原因)。现在我想最有效地将 arr 中包含的每个条目放入一个大的 1D numpy 数组中。所以换句话说,我想在这个特定的顺序中有一个带有array([arr[0,0], arr[0,1], arr[0,2], ... , arr[1,0], arr[0,1], ...])的numpy数组。有关如何在 Pyhton 中编写此内容的任何帮助。

【问题讨论】:

    标签: python arrays python-2.7 numpy


    【解决方案1】:

    听起来您想要展平嵌套列表。也就是说,您的数组数组实际上是一个列表列表。有一个标准的 Python 习惯用法,itertools.chain:

    制作一个样本数组:

    In [828]: arr = np.array([np.arange(i) for i in range(1, 5)])
    In [829]: arr
    Out[829]: array([array([0]), array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3])], dtype=object)
    

    导入和使用链。 *arr 扩展 arr 就好像它是一个列表:

    In [830]: from itertools import chain
    In [831]: list(chain(*arr))
    Out[831]: [0, 0, 1, 0, 1, 2, 0, 1, 2, 3]
    In [832]: np.array(_)
    Out[832]: array([0, 0, 1, 0, 1, 2, 0, 1, 2, 3])
    

    但数组列表的描述也表明我们可以使用np.concatenate(或np.hstack):

    In [837]: np.concatenate(arr)
    Out[837]: array([0, 0, 1, 0, 1, 2, 0, 1, 2, 3])
    

    concatenate 需要一个“列表”,例如并将它们末端连接起来(在唯一的轴上)。

    In [841]: list(arr)
    Out[841]: [array([0]), array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3])]
    

    【讨论】:

      【解决方案2】:

      您尝试过flatten() 方法吗?我认为它可能在这里工作。

      >>> arr = np.identity(5)
      >>> arr.shape
      (5, 5)
      >>> arr = arr.flatten()
      >>> arr.shape
      (25,)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-22
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多