将这个浮点数组保存到一个文本文件将创建一个24M的文本文件。当您重新加载这个文件时,numpy会逐行遍历文件,解析文本并重新创建对象。在
我预计在这段时间内存使用会激增,因为numpy在到达文件末尾之前不知道结果数组需要多大,所以我预计至少要使用24M+8M+的其他临时内存。在
以下是numpy代码的相关位,来自/lib/npyio.py:# Parse each line, including the first
for i, line in enumerate(itertools.chain([first_line], fh)):
vals = split_line(line)
if len(vals) == 0:
continue
if usecols:
vals = [vals[i] for i in usecols]
# Convert each value according to its column and store
items = [conv(val) for (conv, val) in zip(converters, vals)]
# Then pack it according to the dtype's nesting
items = pack_items(items, packing)
X.append(items)
#...A bit further on
X = np.array(X, dtype)
这种额外的内存使用不应该引起关注,因为这正是python的工作方式——虽然您的python进程似乎使用了1亿个内存,但在内部它会保持对哪些项目不再使用的了解,并将重新使用这些内存。例如,如果要在一个程序(save,load,save,load)中重新运行这个save load过程,那么内存使用量不会增加到200M