我是python的新手。我有一个大数组,a
,其大小如(43200, 4000)
,我需要保存它,因为我需要将其用于将来的处理。当我尝试用np.savetxt
保存它时,txt文件太大而我的程序遇到内存错误,因为我需要处理相同大小的5个文件。有没有办法保存庞大的数组,以便占用更少的内存?
感谢。
答案 0 :(得分:11)
将数据保存到文本文件效率非常低。 Numpy有内置的保存命令save和savez/savez_compressed,它们更适合存储大型数组。
根据您计划使用数据的方式,您还应该查看HDF5格式(h5py或pytables),它允许您存储大型数据集,而无需将其全部加载到内存中。
答案 1 :(得分:4)
您可以使用PyTables创建分层数据格式(HDF)文件来存储数据。这提供了一些有趣的内存选项,可以将您正在使用的对象链接到它保存的文件。
以下是另一个StackOverflow问题,演示了如何执行此操作:"How to store a NumPy multidimensional array in PyTables."
如果您愿意将数组作为Pandas DataFrame对象使用,您还可以将Pandas接口用于PyTables / HDF5,例如:
import pandas
import numpy as np
a = np.ones((43200, 4000)) # Not recommended.
x = pandas.HDFStore("some_file.hdf")
x.append("a", pandas.DataFrame(a)) # <-- This will take a while.
x.close()
# Then later on...
my_data = pandas.HDFStore("some_file.hdf") # might also take a while
usable_a_copy = my_data["a"] # Be careful of the way changes to
# `usable_a_copy` affect the saved data.
copy_as_nparray = usable_a_copy.values
对于此大小的文件,您可以考虑是否可以使用并行算法执行应用程序,并且可能仅应用于大型数组的子集,而不是在继续之前需要使用所有数组。