python - Windows 和 Ubuntu 之间 Numpy 数组的内存使用差异

标签 python arrays numpy

正如标题所示,我发现 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 longsee docs 。 C 标准没有准确指定 long 的大小,只是 at least 32 bits (4字节)。实际大小取决于compiler and cpu architecturenumpy bug tracker 上已经对此问题进行了讨论。 .

可以通过显式设置整数类型来避免该问题:

np_arr = np.array(b, dtype=np.int32)

如果您知道数组将保存的最小和最大值,您可能会选择较小的整数类型,例如 int16 或 uint8。

关于python - Windows 和 Ubuntu 之间 Numpy 数组的内存使用差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57814802/

相关文章:

javascript - 数组位于另一个数组中

python - 大数组之间的 numpy bool 比较返回 False 而不是 bool 数组

python - 如何找到每行与列数的最大值并打印它们?

python - Numpy where 函数多个条件

javascript - 如何在 JavaScript 中调用 Python 变量?

python - Scrapy:不要抓取其他域页面上的链接

python - 将 Numpy 数组中多个出现的元素的集合替换为相应的值

python - ActiveMQ-带有Python STOMP客户端的STOMP + SSL

java - 创建行和列

arrays - 将对象添加到 [String : [[String]]] dictionary