【问题标题】:Python: memory error while changing data type from integer to floatPython:将数据类型从整数更改为浮点数时出现内存错误
【发布时间】:2014-05-17 12:00:40
【问题描述】:

我有一个大小为 13000*300000 的数组,其中填充了 0 到 255 的整数。我想将它们的数据类型从整数更改为浮点数,就好像数据是一个 numpy 数组一样:

 data.astype('float')

将其数据类型从整数更改为浮点数时,显示内存错误。我有 80 GB 的 RAM。它仍然显示内存错误。你能告诉我这可能是什么原因吗?

【问题讨论】:

  • 您的 data 大约有 30 GB 按顺序位于内存中。您需要更多 30 GB(也按顺序)来存储结果。我相信这里的关键点是依次
  • 它的真实数据是按顺序排列的。

标签: python numpy types


【解决方案1】:

这里的问题是数据量很大(大约 30GB 的 顺序 数据,请参阅 How much memory in numpy array?),因此在尝试将其放入内存时会导致错误。与其对整体进行操作,不如对其进行切片,然后进行操作,然后合并,例如:

n = 300000
d1 = data[:, :n/2].astype('float')
d2 = data[:, n/2:].astype('float')

data = np.hstack(d1, d2)

一般来说,由于您的数据量非常庞大,请考虑分批使用它,以避免一直被此类问题所困扰(有关此技术和其他技术,请参阅 Techniques for working with large Numpy arrays?)。

【讨论】:

  • 很有可能您必须在 hstack 之前 del data 才能释放足够的内存
猜你喜欢
  • 2015-01-05
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
相关资源
最近更新 更多