我现在正在开展一个项目,并且在某些时候我正在处理一个维度的nparray(165L,653L,1024L,1L)。 (大约100MB的数据)。
出于JSON兼容性原因,我需要将其转换为常规列表。所以我使用了常规函数
array.tolist()
问题是这一行会导致10GB的RAM消耗。这里似乎有些不对,我不应该在大数组上使用tolist()吗?
我在网上浏览了一下,我发现了一些怀疑tolist()泄漏内存,特别是Apparent memory leak with numpy tolist() in long running process和https://mail.python.org/pipermail/matrix-sig/1998-October/002368.html。但这似乎与我的问题没有直接关系。
答案 0 :(得分:1)
而不是尝试将整个165 x 653 x 1024 x 1矩阵转换为列表,以便您可以转身并将其转换为JSON,只需对165 x 1024内部维度列表进行165次转换,然后编写它们使用您自己的显式分隔符的文件。