Python:如何在PyTables中存储numpy多维数组?
如何使用PyTables将numpy多维数组放入HDF5文件中 据我所知,我不能将数组字段放入pytables表中 我还需要存储一些关于这个数组的信息,并能够对其进行数学计算Python:如何在PyTables中存储numpy多维数组?,python,arrays,multidimensional-array,numpy,pytables,Python,Arrays,Multidimensional Array,Numpy,Pytables,如何使用PyTables将numpy多维数组放入HDF5文件中 据我所知,我不能将数组字段放入pytables表中 我还需要存储一些关于这个数组的信息,并能够对其进行数学计算 有什么建议吗 可能有一个更简单的方法,但据我所知,这就是你要做的: import numpy as np import tables # Generate some data x = np.random.random((100,100,100)) # Store "x" in a chunked array... f
有什么建议吗 可能有一个更简单的方法,但据我所知,这就是你要做的:
import numpy as np
import tables
# Generate some data
x = np.random.random((100,100,100))
# Store "x" in a chunked array...
f = tables.open_file('test.hdf', 'w')
atom = tables.Atom.from_dtype(x.dtype)
ds = f.createCArray(f.root, 'somename', atom, x.shape)
ds[:] = x
f.close()
如果要指定要使用的压缩,请查看表。过滤器。例如
import numpy as np
import tables
# Generate some data
x = np.random.random((100,100,100))
# Store "x" in a chunked array with level 5 BLOSC compression...
f = tables.open_file('test.hdf', 'w')
atom = tables.Atom.from_dtype(x.dtype)
filters = tables.Filters(complib='blosc', complevel=5)
ds = f.createCArray(f.root, 'somename', atom, x.shape, filters=filters)
ds[:] = x
f.close()
可能有一个更简单的方法来解决很多问题。。。很长一段时间以来,除了类似于表的数据之外,我没有使用pytables
注意:对于pytables 3.0,f.createCArray
被重命名为f.create\u carray
。它还可以直接接受数组,而无需指定原子
f.create_carray('/', 'somename', obj=x, filters=filters)
老实说,如果您正在存储大量直接的ND阵列,那么最好使用h5py
而不是pytables
。它就像f.create_dataset('name',data=x)
一样简单,其中x
是您的numpy数组,f
是打开的hdf文件。在pytables
中做同样的事情是可能的,但要困难得多。我正要发表一篇几乎相同的评论。我想到了这一点,但是pytables有一些功能(tables.expr)可以直接在数组上进行计算,我可以用h5py吗?@脚本-而不是像pytables
那样以压缩、加速的方式。(至少据我所知不是这样。)pytables
还将为您提供许多很好的查询功能h5py
更适合于磁盘阵列的直接存储和切片(i.m.o.也更像pythonic)。我不想过多地插入我自己的答案,但我对两者之间的权衡的想法如下:感谢Joe Kington提供的信息和我的案例,pytables更适合,因为它具有强大的查询技术,现在可以在文件对象上使用create_array方法更直接地完成这项工作,如AttributeError:“File”对象没有属性“createCArray”