10

我是 python 新手。我有一个大数组,a,尺寸为(43200, 4000)和 我需要保存它,因为我需要它以备将来处理。当我尝试用 a 保存它时np.savetxt,txt 文件太大,我的程序遇到内存错误,因为我需要处理 5 个相同大小的文件。有没有办法保存巨大的数组以减少内存?

谢谢。

4

2 回答 2

12

将数据保存到文本文件是非常低效的。Numpy 有内置的保存命令savesavez/savez_compressed更适合存储大型数组。

根据您计划如何使用数据,您还应该研究 HDF5 格式(h5py 或 pytables),它允许您存储大型数据集,而无需将其全部加载到内存中。

于 2013-09-10T18:18:45.080 回答
4

您可以使用 PyTables 创建分层数据格式 (HDF) 文件来存储数据。这提供了一些有趣的内存选项,将您正在使用的对象链接到保存它的文件。

这是演示如何执行此操作的另一个 StackOverflow 问题:“如何在 PyTables 中存储 NumPy 多维数组”。

如果您愿意将数组用作 Pandas DataFrame 对象,您还可以使用 PyTables / HDF5 的 Pandas 接口,例如:

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

对于这种大小的文件,您可能会考虑您的应用程序是否可以使用并行算法执行并可能仅应用于大型数组的子集,而不是在继续之前需要消耗所有数组。

于 2013-09-10T18:20:20.567 回答