【问题标题】:Efficiently concatenate many large 3-dimensional arrays in python在 python 中有效地连接许多大型 3 维数组
【发布时间】:2018-08-01 11:32:22
【问题描述】:

我有大约 100 个 numpy 数组。它们中的每一个都具有 (100, 40000, 4) 的形状。我想将这些数组沿第一个轴(即axis=0)高效地连接到一个大数组中。

方法 1

我用np.concatenate如下图-

def concatenate(all_data):
    for index, data in enumerate(all_data):
        if index == 0:
            arr = data.copy()
        else:
            arr = np.concatenate((arr, data), axis=0)
    return arr

方法2

我在 pandas 中创建了面板,然后使用pd.concat 如下图-

def concatenate(all_data):
    for index, data in enumerate(all_data):
        if index == 0:
            pn = pd.Panel(data)
        else:
            pn = pd.concat([pn, pd.Panel(data)])
    return pn # numpy array can be acquired from pn.values 

第二种方法似乎比第一种更快。但是,这种方法在创建 pd.Panel 时会显示已弃用的警告。

我想知道在 python 中是否存在更好的连接大型 3 维数组的方法。

【问题讨论】:

  • all_data 是什么类型(列表或数组或其他)?如果是数组,它的形状是什么?
  • 这是numpy数组的列表!
  • 这是numpy数组的列表,其中每个numpy数组的形状为(100, 40000, 4)

标签: python arrays pandas numpy multidimensional-array


【解决方案1】:

反复调用np.concatenate() 是一种反模式。相反,试试这个:

np.concatenate(all_data)

简单,快速。

【讨论】:

    猜你喜欢
    • 2020-08-20
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 2022-01-27
    • 2017-08-18
    • 1970-01-01
    • 2018-05-06
    相关资源
    最近更新 更多