3

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

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

任何帮助表示赞赏。

4

2 回答 2

2

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

如果要连续追加数据到数组中,可以先创建一个大数组,使用索引将数据复制进去。

或者您可以使用数组模块中的数组对象,它是一个动态数组,其行为类似于列表。将所有数据追加到数组对象后,您可以将其转换为 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)
于 2012-08-16T01:43:50.543 回答
1

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

于 2012-08-17T01:26:12.910 回答