Arrays Mathematica HDF5和复合阵列
有没有人在Mathematica中有办法读取HDF5复合数组?我在表中有一个简单的2D复合类型(int/float),但它目前被忽略 HDF5类型的示例可能是:Arrays Mathematica HDF5和复合阵列,arrays,numpy,wolfram-mathematica,hdf5,Arrays,Numpy,Wolfram Mathematica,Hdf5,有没有人在Mathematica中有办法读取HDF5复合数组?我在表中有一个简单的2D复合类型(int/float),但它目前被忽略 HDF5类型的示例可能是: DATATYPE H5T_COMPOUND { H5T_IEEE_F32LE "X"; H5T_IEEE_F32LE "Y"; } 值得注意的是,版本8仍然忽略复合数据类型。然而,从v。8,另一种方法是创建可以加载复合数据类型的。这可能意味着您将不得不重新实现HDF5导入器,但我还没有尝试过。我仍然在使用7,但我很长一
DATATYPE H5T_COMPOUND {
H5T_IEEE_F32LE "X";
H5T_IEEE_F32LE "Y";
}
值得注意的是,版本8仍然忽略复合数据类型。然而,从v。8,另一种方法是创建可以加载复合数据类型的。这可能意味着您将不得不重新实现HDF5导入器,但我还没有尝试过。我仍然在使用7,但我很长一段时间以来一直想要这种功能。有一个软件包,显然是由Scot Martin创建的 就我所见,它实现了很多HDF5功能,包括复合类型 下面是包中
11 HDF5HighLevel Examples.nb
的一个简短片段:
With[
{
file = FileNameJoin[{Directory[], subfolderWithExamples, "h5ex_t_cmpd.h5"}],
dataSet = "DS1"
},
CompoundDataType`Information[file, dataSet]
]
(*
{"DataSpaceDimensions" -> {4},
"MemberDataTypeClass" -> {0, -3, 1, 1},
"MemberMemorySize" -> {8, 8, 8, 8},
"MemberName" -> {"Serial number" , "Location",
"Temperature (F)", "Pressure (inHg)"},
"MemberOffset" -> {0, 8, 20, 28},
"MemberSize" -> {8, 8, 8, 8},
"MemoryDataTypeSize" -> 32,
"NumberOfMembers" -> 4}
*)
嗯 我创建了
h5dumpImport
,这是一个开源的Mathematica软件包,它提供了一种独立于平台的方式来导入具有复合数据类型的HDF5(.h5)文件的数据集,同时向用户隐藏大部分HDF5实现。包含文档、示例和单元测试的包位于
目前,h5dumpImport
包没有直接导入HDF5(.h5)文件格式。h5dumpImport
包导入由h5dump
命令行工具生成的数据集的ASCII转储
HDF5软件的源代码和预构建二进制发行版(包括h5dump
命令行工具)可在HDF组的网站上找到
基本示例
结果:
{{1, 11, 111, 1111, 11111, 111111, 1111111, 1.1, 11.11, "one"},
{2, 22, 222, 2222, 22222, 222222, 2222222, 2.2, 22.22, "two"},
{3, 33, 333, 3333, 33333, 333333, 3333333, 3.3, 33.33, "three"}}
可以找到详细的安装说明、使用信息、文档、示例和单元测试。从版本11.1开始导入HDF5文件可以处理复合类型(甚至嵌套),并将其转换为关联 示例文件
ExampleData/sample2.h5
包含一个名为/component
的数据集,其中包含一个2x2的复合元素矩阵。您可以按如下方式导入数据:
In[3]:= Import["ExampleData/sample2.h5", "/Compound"]
Out[3]= {
{
<|
"Country" -> "Botswana",
"Military" -> {5.3, 4.5},
"Elevation" -> <|"Max" -> 4892, "Min" -> 513, "Highest point" -> "Otse Hill"|>
|>,
<|
"Country" -> "Chile",
"Military" -> {8.8, 3.7},
"Elevation" -> <|"Max" -> 6893, "Min" -> 0, "Highest point" -> "Ojos del Salado"|>
|>
}, {
<|
"Country" -> "France",
"Military" -> {5.3, 3.3},
"Elevation" -> <|"Max" -> 4810, "Min" -> -10, "Highest point" -> "Mont Blanc"|>
|>,
<|
"Country" -> "Laos",
"Military" -> {18.9, 4.3},
"Elevation" -> <|"Max" -> 2817, "Min" -> 70, "Highest point" -> "Phou Bia"
|>
|>
}}
请发布您的数据结构好吗?另请注意,根据帮助(虽然不是很清楚),您只能在数据集级别指定“DataFormat”。编辑后包含HDF5类型。遇到以下问题。它很古老,你可能知道它。v6看起来还可以吗?这个bug在v8中仍然存在吗?我没有复制这个bug-但是谢谢。问题是Mathematica无法显式导入复合类型。如果有人编写导入器转换器,请共享@谢谢你通知我!
In[3]:= Import["ExampleData/sample2.h5", "/Compound"]
Out[3]= {
{
<|
"Country" -> "Botswana",
"Military" -> {5.3, 4.5},
"Elevation" -> <|"Max" -> 4892, "Min" -> 513, "Highest point" -> "Otse Hill"|>
|>,
<|
"Country" -> "Chile",
"Military" -> {8.8, 3.7},
"Elevation" -> <|"Max" -> 6893, "Min" -> 0, "Highest point" -> "Ojos del Salado"|>
|>
}, {
<|
"Country" -> "France",
"Military" -> {5.3, 3.3},
"Elevation" -> <|"Max" -> 4810, "Min" -> -10, "Highest point" -> "Mont Blanc"|>
|>,
<|
"Country" -> "Laos",
"Military" -> {18.9, 4.3},
"Elevation" -> <|"Max" -> 2817, "Min" -> 70, "Highest point" -> "Phou Bia"
|>
|>
}}
In[2]:= Import["ExampleData/sample2.h5", {"DataFormat", "/Compound"}]
Out[2]= <|
"Class" -> "Compound",
"Structure" -> <|
"Country" -> "String",
"Military" -> <|"Class" -> "Array", "Dimensions" -> {2}, "DataFormat" -> "Real64"|>,
"Elevation" -> <|
"Class" -> "Compound",
"Structure" -> <|"Max" -> "Integer16", "Min" -> "Integer16", "Highest point" -> "String"|>
|>
|>
|>