1
學習ILNumerics HDF5 API。我非常喜歡使用C#對象初始化器在一個表達式中設置複雜的HDF5文件的選項。我創建以下文件:如何過濾HDF5文件中的特定對象
using (var f = new H5File("myFile.h5")) {
f.Add(new H5Group("myTopNode") {
new H5Dataset("dsNo1", ILMath.vec<float>(1,200)), // no attributes
new H5Group("myGroup") {
new H5Dataset("dsYes", ILMath.rand(100,200)) { // matching dataset
Attributes = {
{ "att1", 1 },
{ "att2", 2 }
}
},
new H5Dataset("dsNo2") { // attributes but wrong name
Attributes = {
{ "wrong1", -100 },
{ "wrong2", -200 }
}
}
}
});
}
現在我正在尋找一個聰明的方法來遍歷文件和過濾器具有特殊性能的數據集。 我想找到所有具有至少一個名稱爲「att」的屬性的數據集,收集並返回它們的內容。這是我到目前爲止:
IList<ILArray<double>> list = new List<ILArray<double>>();
using (var f = new H5File("myFile.h5")) {
var groups = f.Groups;
foreach (var g in groups) {
foreach (var obj in g) {
if (obj.H5Type == H5ObjectTypes.Dataset && obj.Name.Contains("ds")) {
var ds = obj as H5Dataset;
// look for attributes
foreach (var att in ds.Attributes) {
//ds.Attributes["att"].
if (att.Name.Contains("att")) {
list.Add(ds.Get<double>());
}
}
}
}
}
}
return list;
但它不能遞歸地工作。我可以採用它,但ILNumerics聲稱是方便的,所以必須有更好的方法?在python中類似於h5py的東西?