首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyTables与Matlab的HDF5读取时间

PyTables与Matlab的HDF5读取时间
EN

Stack Overflow用户
提问于 2019-01-22 01:43:40
回答 2查看 807关注 0票数 0

我有一个来自NASTRAN的HDF5输出文件,其中包含模式形状数据。我试图将它们读入Matlab和Python,以检查各种后处理技术。所讨论的文件位于这两个测试的本地目录中。该文件是半大的,1.2GB,但肯定没有那么大的HDF5文件,我以前读过。我想访问的表中有17567342行8列。第一列和最后一列是整数,中间6是浮点数。

Matlab:

代码语言:javascript
复制
file = 'HDF5.h5';
hinfo = hdf5info(file);
% ... Find the dataset I want to extract
t = hdf5read(file, '/NASTRAN/RESULT/NODAL/EIGENVECTOR');

最后一次操作非常慢(可以用小时来衡量)。

Python:

代码语言:javascript
复制
import tables
hfile = tables.open_file("HDF5.h5")
modetable = hfile.root.NASTRAN.RESULT.NODAL.EIGENVECTOR
data = modetable.read()

最后一次操作基本上是即时的。然后我可以访问data,就好像它是一个numpy数组一样。关于这些命令所做的事情,我显然遗漏了一些非常基本的东西。我认为这可能与数据转换有关,但我不确定。如果我做了type(data),我就返回numpy.ndarraytype(data[0])返回numpy.void

在Matlab中读取我想要的数据集的正确(即快速)方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-05 19:37:30

Matlab提供了另一个名为HDF5的h5read阅读器。使用同样的基本方法,读取数据所需的时间大大减少。事实上,在将来的版本中,hdf5read是要删除的。下面是与perfered函数相同的基本代码。

代码语言:javascript
复制
file = 'HDF5.h5';
hinfo = h5info(file);
% ... Find the dataset I want to extract
t = h5read(file, '/NASTRAN/RESULT/NODAL/EIGENVECTOR');
票数 0
EN

Stack Overflow用户

发布于 2019-02-07 03:39:00

马特你还在研究这个问题吗?我不是一个matlab的家伙,但我熟悉Nastran HDF5文件。您是对的;1.2 GB是很大的,但以今天的标准来说没有那么大。

您可以通过在特征向量数据集中运行不同行数的测试来诊断matlab性能瓶颈。为了做到这一点(不运行大量的Nastran作业),我创建了一些简单的代码来创建一个具有用户定义的#行的HDF5文件。它模拟了Nastran特征向量结果集的结构。见下文:

代码语言:javascript
复制
import tables as tb
import numpy as np
hfile = tb.open_file('SO_54300107.h5','w')

eigen_dtype = np.dtype([('ID',int), ('X',float),('Y',float),('Z',float),
                        ('RX',float),('RY',float),('RZ',float), ('DOMAIN_ID',int)])

fsize = 1000.0
isize = int(fsize)
recarr = np.recarray((isize,),dtype=eigen_dtype)

id_arr = np.arange(1,isize+1)
dom_arr = np.ones((isize,), dtype=int)
arr = np.array(np.arange(fsize))/fsize

recarr['ID'] = id_arr
recarr['X'] = arr
recarr['Y'] = arr
recarr['Z'] = arr
recarr['RX'] = arr
recarr['RY'] = arr
recarr['RZ'] = arr
recarr['DOMAIN_ID'] = dom_arr

modetable = hfile.create_table('/NASTRAN/RESULT/NODAL', 'EIGENVECTOR',
                                 createparents=True, obj=recarr )

hfile.close()

尝试使用不同的fsize值(行的#)来运行它,然后将它创建的HDF5文件附加到matlab中。也许你可以找到性能明显下降的点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54300107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档