当前位置: 首页 > 面试题库 >

由Python创建的HDF5数据集在Matlab中转置

桂嘉年
2023-03-14
问题内容

我有一些在Python和Matlab之间共享的数据。我曾经通过将NumPy数组保存在MATLAB样式的.mat文件中来做到这一点,但想切换到HDF5数据集。但是,我注意到一个有趣的功能:将NumPy数组保存在HDF5文件中(使用h5py),然后在Matlab中读取它(使用h5read)时,它最终被转置了。有什么我想念的吗?

Python代码:

import numpy as np
import h5py

mystuff = np.random.rand(10,30)

f = h5py.File('/home/user/test.h5', 'w')
f['mydataset'] = mystuff
f.close()

Matlab代码:

mystuff = h5read('/home/user/test.h5', '/mydataset');
size(mystuff) % 30 by 10

问题答案:

这是Matlab的HDF5阅读器例程中的一个怪癖。(我认为这种行为背后的原因是:二进制文件中的数据按C顺序排列,Matlab数组按Fortran顺序排列,因此它们应将数据报告为转置的,而不是重新排序。)

如果检查使用HDF5工具由Python创建的文件,则尺寸应为以下尺寸:

$ h5ls test.h5 
mydataset数据集{10,30}


 类似资料:
  • 对于我的毕业论文,我需要创建一个扑克动作的数据集来测试模型。我编写了一个函数,该函数读取包含关于手的信息的文本文件,并返回,并将其附加到pandas数据帧中。 我有大约1500个文件,每个文件包含1500~3000个需要传递给这个函数的手,所以我的主脚本看起来像这样。 问题是,运行几个小时后,它变得非常慢。第一个文件大约需要20秒,但它们每次都变慢,在运行8h后,它们开始需要一个多小时。我刚开始为

  • 我有一个非常大的数据集,我通过append以块形式写入hdf5,如下所示: 数据太大,无法加载到一个DataFrame中,因此我想尝试使用vaex进行进一步处理。不过有几件事我不太明白。 由于vaex在hdf5中使用了不同于pandas/pytables(VOTable)的表示形式,我想知道如何在这两种格式之间进行转换。我尝试将数据块加载到pandas中,将其转换为vaex数据帧,然后将其存储,但

  • 问题内容: 我有一个其中嵌套了数据类对象的数据类对象。但是,当我创建主对象时,嵌套的对象会变成字典: 如您所见,我试图将所有数据作为字典传递,但没有得到预期的结果。然后,我尝试先构造嵌套对象,然后将其传递给对象构造函数,但得到的结果相同。 理想情况下,我想构造我的对象以获得以下内容: 除了在访问对象属性时手动将嵌套字典转换为相应的数据类对象之外,还有什么方法可以实现? 提前致谢。 问题答案: 这是

  • 问题内容: 我需要使用具有多个索引的大型数据框,因此我尝试创建一个数据框以了解如何将其存储在hdf5文件中。数据框是这样的:(在前2列中有multi索引) 我正在使用pandas.to_hdf,但在尝试选择组中的数据时会创建“固定格式存储”: 它返回一些错误,主要问题是 然后我试图像这样追加DataFrame: 那应该创建一个表,但这给了我另一个错误: 所以我需要的代码将数据帧存储在一个表中HDF

  • 在Matlab中,我希望以这样一种方式对数据进行采样,即计算矩阵的长度,为此,计算其每并存储在数组中。我取样的数据。例如,,它是。 现在,我想检查原始的索引是否等于采样的矩阵索引(显然该操作是在循环中),然后合并两个相同的索引,如下所示:

  • 我有一个数据类对象,其中包含嵌套的数据类对象。但是,当我创建主对象时,嵌套的对象会变成字典: 如您所见,只有有效。 理想情况下,我想构造我的对象来获得这样的东西: 除了在访问对象属性时手动将嵌套字典转换为相应的数据类对象之外,还有别的方法可以实现这一点吗?