【问题标题】:Why does numpy takes so much memory for an array of strings?为什么 numpy 为一个字符串数组占用这么多内存?
【发布时间】:2019-01-09 09:00:30
【问题描述】:

似乎将字符串数组放入 numpy 数组中占用的内存是原始数组的 20 倍以上。我可以理解由于一些开销会多占用 10% 的内存,但我想知道为什么要多占用 2000%。

import numpy as np
from sys import getsizeof

txt = ["adsfjwofj owejifowijefiwjfoi of wofjwoijfwoijfoiwej"]
print(getsizeof(txt))

txts = [txt for _ in range(10000)]
print(getsizeof(txts))

txts_np = np.array(txts)
print(getsizeof(txts_np))

输出:

72
87624
2040112

我认为我的安装有问题,但我也在另一台具有不同 numpy 版本的机器上尝试了它并得到了相同的结果。

【问题讨论】:

  • getsizeof 不是递归的,列表不包含实际对象,它们包含指向它们的指针。更公平的比较是:sum(getsizeof(x) for x in txts)。我不确定__sizeof__ 在 nd 数组的情况下是如何工作的,如果它被实现的话。

标签: python-3.x numpy numpy-ndarray


【解决方案1】:

这是一个自我回答,因为它是由 @Ashwini Chaudhary 在 cmets 中回答的。

我观察到 numpy 比原始数组占用更多内存是无效的。 sys.getsizeof 不是报告内存使用情况的好工具:它似乎正确地报告了 numpy 数组的大小,但只报告了原始数组中指针占用的大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2021-07-13
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多