나는 ilnumerics의 베타 hdf5 툴킷을 시험 중이다.H5Attributes에서 기본 데이터 형식을 지원합니까?
현재 H5Attributes는 ilnumerics 배열 만 지원합니다. 최종 릴리스의 일부로 기본 데이터 유형 (예 : 문자열)을 확장 할 계획이 있습니까?
ilnumerics H5 래퍼는 특정 기능을 특정 데이터 형식으로 확장하는 기능을 제공합니까?
나는 ilnumerics의 베타 hdf5 툴킷을 시험 중이다.H5Attributes에서 기본 데이터 형식을 지원합니까?
현재 H5Attributes는 ilnumerics 배열 만 지원합니다. 최종 릴리스의 일부로 기본 데이터 유형 (예 : 문자열)을 확장 할 계획이 있습니까?
ilnumerics H5 래퍼는 특정 기능을 특정 데이터 형식으로 확장하는 기능을 제공합니까?
ILNumerics는 내부적으로 HDF 그룹의 공식 HDF5 라이브러리를 내부적으로 사용합니다. HDF5의 H5Attributes는 부분 입출력이 불가능한 제한 사항이있는 데이터 세트에 해당합니다. 게다가, H5Attributes는 일반 배열입니다! 기본 (스칼라) 요소 유형에 대한 지원은 배열이 스칼라로 저장된 것으로 가정하여 제공됩니다.
문자열은 완전히 다른 이야기입니다. 일반적으로 문자열은 가변 길이 데이터 유형입니다. HDF5 문자열은 요소 유형 Char의 배열입니다. 문자열의 문자 수는 배열의 길이를 결정합니다. 문자열을 데이터 집합이나 속성에 저장하려면 배열의 요소로 개별 문자를 저장해야합니다. ILNumerics에서는 문자열을 ILArrray 또는 ILArray (ASCII 데이터 용)로 변환하여 데이터 세트/속성에 저장할 수 있습니다.
문자열을 값으로 값으로 저장하고 내용을 문자열로 다시 읽는 다음 테스트 사례를 참조하십시오.
면책 조항 : 이것은 내부 테스트 제품군의 일부입니다. 사용할 수없는 여러 함수의 존재 여부에 따라 예제를 직접 컴파일 할 수 없습니다. 그러나, 당신은 데이터 세트에 문자열을 저장하고 속성을하는 방법을 이해 할 수있을 것입니다 : HDF5 속성과 그냥 작동 H5Dataset에 대해 동일한 것으로 '숯불 배열'로
public void StringASCIAttribute() {
string file = "deleteA0001.h5";
string val = "This is a long string to be stored into an attribute.\r\n";
// transfer string into ILArray<Char>
ILArray<Char> A = ILMath.array<Char>(' ', 1, val.Length);
for (int i = 0; i < val.Length; i++) {
A.SetValue(val[i], 0, i);
}
// store the string as attribute of a group
using (var f = new H5File(file)) {
f.Add(new H5Group("grp1") {
Attributes = {
{ "title", A }
}
});
}
// check by reading back
// read back
using (var f = new H5File(file)) {
// must exist in the file
Assert.IsTrue(f.Get<H5Group>("grp1").Attributes.ContainsKey("title"));
// check size
var attr = f.Get<H5Group>("grp1").Attributes["title"];
Assert.IsTrue(attr.Size == ILMath.size(1, val.Length));
// read back
ILArray<Char> titleChar = attr.Get<Char>();
ILArray<byte> titleByte = attr.Get<byte>();
// compare byte values (sum)
int origsum = 0;
foreach (var c in val) origsum += (Byte)c;
Assert.IsTrue(ILMath.sumall(ILMath.toint32(titleByte)) == origsum);
StringBuilder title = new StringBuilder(attr.Size[1]);
for (int i = 0; i < titleChar.Length; i++) {
title.Append(titleChar.GetValue(i));
}
Assert.IsTrue(title.ToString() == val);
}
}
이 저장 임의의 문자열.
대체 솔루션으로 당신은 문자열로 속성을 작성하는 HDF5DotNet (http://hdf5.net/default.aspx) 래퍼를 사용할 수 있습니다 :
H5.open()
Uri destination = new Uri(@"C:\yourFileLocation\FileName.h5");
//Create an HDF5 file
H5FileId fileId = H5F.create(destination.LocalPath, H5F.CreateMode.ACC_TRUNC);
//Add a group to the file
H5GroupId groupId = H5G.create(fileId, "groupName");
string myString = "String attribute";
byte[] attrData = Encoding.ASCII.GetBytes(myString);
//Create an attribute of type STRING attached to the group
H5AttributeId attrId = H5A.create(groupId, "attributeName", H5T.create(H5T.CreateClass.STRING, attrData.Length),
H5S.create(H5S.H5SClass.SCALAR));
//Write the string into the attribute
H5A.write(attributeId, H5T.create(H5T.CreateClass.STRING, attrData.Length), new H5Array<byte>(attrData));
H5A.close(attributeId);
H5G.close(groupId);
H5F.close(fileId);
H5.close();
을 문자열이 정수의 배열로 HDF5에 저장됩니다이 예에서. 예를 들어 HDFView에서 파일을 열려고하면 개별 문자의 ASCII 값이 표시됩니다. –