调整numpy或数据集大小的有效方法?

时间:2012-08-16 00:57:40

标签: python numpy h5py

我想了解resize()函数对numpy数组与h5py dataset的影响。在我的应用程序中,我逐行读取文本文件,然后在解析数据后,写入hdf5文件。实现这一目标的好方法是什么。我应该将每个新行添加到numpy数组中,并为numpy数组继续调整(增加轴)(最终将完整的numpy数组写入h5py数据集)或者我应该直接将每个新行数据添加到h5py dataset,从而调整内存中h5py dataset的大小。如果我们在每行之后继续调整大小,resize()函数如何影响性能?或者我应该在每100或1000行之后调整大小?

每个数据集中可以有大约200,000行。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

我认为resize()会复制数组中的所有数据,如果你重复调用它会很慢。

如果要将数据连续追加到数组中,可以先创建一个大型数组,然后使用index将数据复制到其中。

或者您可以使用数组模块中的数组对象,它是一个行为类似于列表的动态数组。将所有数据附加到数组对象后,您可以将其转换为ndarray。这是一个例子:

import array
import numpy as np
a = array.array("d")
a.extend([0,1,2])
a.extend([3,4,5])
b = np.frombuffer(a, np.float).reshape(-1, 3)

答案 1 :(得分:1)

NumPy数组的设计不适合调整大小。它是可行的,但在内存方面浪费(因为你需要创建一个比第一个大的第二个数组,然后用你的数据填充它......这是你必须保留的两个数组)当然还有时间(创建)临时数组)。 你最好从列表(或常规数组,如@HYRY建议)开始,然后当你有一个足够大的块时转换为ndarrays。 问题是,你什么时候需要进行转换?