Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Mathematica HDF5和复合阵列_Arrays_Numpy_Wolfram Mathematica_Hdf5 - Fatal编程技术网

Arrays Mathematica 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,但我很长一

有没有人在Mathematica中有办法读取HDF5复合数组?我在表中有一个简单的2D复合类型(int/float),但它目前被忽略

HDF5类型的示例可能是:

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"|>
    |>
  |>
|>