正如标题所示,我发现 Windows 和 Ubuntu 之间 numpy 数组的内存使用情况存在很大差异。
下面是复制此问题的简单代码:
import numpy as np
import joblib
a = [1]*1000
b = [a for i in range(1000)]
np_arr = np.array(b)
joblib.dump(np_arr, 'arr.h5')
如果我在 Windows 10 计算机中运行此代码,arr.h5
的大小为 3907KB。
但如果我在 Ubuntu 18.04 上运行它,它是7812KB
主要问题是我正在处理大型数据集,并且我的代码在 16GB 的 Windows 计算机上运行良好,但在 32GB 的 Ubuntu 上出现内存错误
最佳答案
是的,这是 Windows 和 Linux 之间的区别...
numpy 中的默认整数是 np.int_
,它映射到 C long
,see docs 。 C 标准没有准确指定 long
的大小,只是 at least 32 bits (4字节)。实际大小取决于compiler and cpu architecture 。 numpy bug tracker 上已经对此问题进行了讨论。 .
可以通过显式设置整数类型来避免该问题:
np_arr = np.array(b, dtype=np.int32)
如果您知道数组将保存的最小和最大值,您可能会选择较小的整数类型,例如 int16 或 uint8。
关于python - Windows 和 Ubuntu 之间 Numpy 数组的内存使用差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57814802/