【发布时间】: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