使用cython和h5py快速读取hdf5文件

时间:2016-10-07 15:59:17

标签: python cython h5py

我正在尝试加速一个python3函数,它接受一些数据,这是一个索引数组,如果它们符合某个标准就会保存它们。我试图通过使用“cython -a script.py”来加速它,但瓶颈似乎是h5py I / O切片数据集。

我对cython比较陌生,所以我想知道是否还有提高速度,或者我只是受到h5py I / O的限制?

以下是我正在努力改进的功能:

{{1}}

1 个答案:

答案 0 :(得分:2)

如此处所述:http://api.h5py.org/h5py使用cython代码与HDF5 c代码进行交互。因此,您自己的cython代码可能可以直接访问该代码。但我怀疑这需要更多的研究。

您的代码使用的是h5py的Python界面,cythonizing不会触及它。

cython代码最适用于低级操作,尤其是不能表示为数组操作的迭代操作。首先研究和试验numpy示例。你正潜入游泳池深处的cython

您是否尝试使用Python和numpy改进代码?一眼就看出我看到了很多冗余的h5py电话。

====================

你的radial计算可以访问h5py索引6次,当它可以用2进行时。也许你是这样编写的,希望cython比numpy更快地执行以下计算?

data = grp['HaloCatalog']
progen = data[progen_haloid-1, 6:9]
host = data[host_id-1, 6:9]
radial = np.sqrt((progren-host)**2).sum(axis=1))

为什么不加载所有data[progen_haloid-1,:]data[host_id-1,:]?甚至全部data?我必须检查h5py何时切换到直接使用文件上的数组以及何时成为numpy数组。在任何情况下,内存中数组的数学运算都会比文件读取快得多。