【问题标题】:How to create big np.zeros matrices?如何创建大 np.zeros 矩阵?
【发布时间】:2019-09-29 16:14:49
【问题描述】:

当我尝试在 Colab 中创建一个具有 12GB RAM 的 numpy 矩阵时,我看到了内存错误:

A = np.zeros((644253, 50, 259))

我该如何解决这个问题?

【问题讨论】:

  • 这需要大约 8 GB 的内存 (644253 * 50 * 259/1000/1024/1024)。您是否也在运行其他进程?
  • 默认类型是 float64 所以每个元素 8 个字节 @kmario23
  • 如果矩阵是稀疏的,你可能想看看sparse matrix objects in scipy
  • @MarkSetchell 啊,是的,我忘了乘以那个因素。 8 * 644253 * 50 * 259/1024/1024/1024 = 62.16076277196407 GB。感谢您指出这一点:)
  • 如果你的矩阵是稀疏的,一个可能的替代方法是使用scipy.sparse。请注意,scipy.sparse 仅支持 2d 矩阵,因此您需要某种技巧来处理 3d 数组(例如,重塑数组)。这取决于你想做什么。

标签: numpy memory-management out-of-memory google-colaboratory


【解决方案1】:

默认类型为 np.float64,即 8 字节。以 GB 为单位的大小为 644253*50*259*8/1024**3 = 62.16GB。你不能创建这样的矩阵,没有足够的内存。如果您真的需要它,请添加大量交换内存,但与 RAM 相比会非常慢(可能慢几个数量级)。您也可以尝试A = np.zeros((644253, 50, 259), type=np.float32)A = np.zeros((644253, 50, 259), type=np.int8) 或任何您需要的类型。这可以节省内存。

【讨论】:

  • 谢谢。它适用于通常的 macbook:youtu.be/ZGU5kIG7b2I?t=1599。怎么会这样?矩阵中有超过 32k 个值,int8 太小了。您确定没有任何解决此问题的方法吗?
  • 也许你的 Colab 东西没有你的 MacBook 那么多的交换空间......
  • 我相信np.memmap 会自动填充零。因此您也可以使用np.memmap('myTempFile.bin', 'uint32', 'w+', 0, (644253,50,259))。顺便说一句,32k 是int16。如果您的最大值小于 64k,请考虑 uint16
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2017-05-22
  • 2023-04-02
  • 2012-10-03
相关资源
最近更新 更多