【问题标题】:Combining Numpy Arrays Feature Matrices In Python在 Python 中组合 Numpy 数组特征矩阵
【发布时间】:2020-12-12 03:07:42
【问题描述】:

我有38910 rows and 2 columns 的数据。由于它是一个字符串数据,所以我使用了 A 和 B 两种特征创建方法。

方法 A 为我提供了以下形状的 numpy 数组的数据:

a.shape = (38910, 17, 21)

方法 B 为我提供了以下形状的 numpy 数组的数据:

b.shape = (38910, 16, 441)

现在,为了应用卷积神经网络和其他方法,我需要结合这两种功能来制作一个 shape = (38910, 17, 21, 16, 441) 的 numpy 数组。我能做到这一点的最好方法是什么,这样我就不会遇到记忆问题。

【问题讨论】:

  • 您能否详细说明为什么需要一次将整个数据集放入内存中?是否可以批量组装行并将它们保存到磁盘,然后在训练时批量加载它们?
  • 没有任何具体原因,但这似乎很容易,因为我是这个领域的初学者。所以,我没有任何知识来批量组装行,将它们保存到磁盘然后加载。如果您能回答我的问题,包括组装、保存和加载行,我将非常感谢@MatthewCox
  • 这似乎很容易:您要求将大量数据放入内存而不面临内存问题。我不认为这很容易。您无需组装批次、保存到磁盘和加载。而是将批次视为(a_part, b_part),其中每个组件都是较大对应部分的一小部分,例如长度100。这样做,您可以有效地将38910 替换为100,这使您的问题变得容易得多。

标签: python numpy


【解决方案1】:

避免内存问题的一种方法是批量处理行。假设你有一个函数combine_features(a, b),它结合了方法 A 和方法 B 的输出,下面是一个解决方案的大致轮廓:

a_batches = np.array_split(a, 500)
b_batches = np.array_split(b, 500)
for i, batch in enumerate(zip(a_batches, b_batches)):
  a_batch, b_batch = batch
  output = combine_features(a_batch, b_batch)
  np.save(f"{destination_folder}/data-{i}.npy", output)

然后在训练时,您可以遍历保存的文件并一次加载一个。

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 2010-12-28
    • 2016-02-02
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多