Python (pytables 사용)에서는 타임 스탬프가 포함 된 행 (열 데이터 유형 Time64
, http://pytables.github.io/usersguide/datatypes.html 참조)이있는 HDF5 테이블을 쉽게 만들 수 있습니다.IDL에서 HDF5 Time64 컬럼을 읽으려면 어떻게해야합니까?
IDL 8.2에서 Time64 유형의 열을 포함하는 테이블을 읽을 수 있습니까?
fid = H5F_OPEN(filename)
tabID = H5D_OPEN(fid, '/path/to/table')
data = H5D_READ(tabID)
의 기본 접근 방식은 노드 /path/to/table
유형의 Time64의 열을 포함하는 경우 질식 할 것 같다. IDL에 의해 네이티브로 지원되지 않더라도 IDL의 데이터 유형을 변환/해석하는 방법이 있다고 생각하십니까? 결국 Time64 열은 8 바이트 값입니다 ...
찾을 수있는 가장 관련성이 높은 IDL 문서는 http://www.exelisvis.com/docs/HDF5_Overview.html입니다.
측면 질문 : HDF5 그룹의 HDFView는 HDF5에 특수 8 바이트 열 유형이 있지만 Time64도 지원하지 않는 것 같습니다 (미안하지만 다른 링크를 게시 할 수 없음). pytables에서 사용하는이 열 유형이 표준 열 유형이 아닌가?
편집 : 나는 Time64 열이있는 테이블을 포함하는 예시 HDF5 파일을 만든, 링크에 대한 설명을 참조하십시오. 이 파일은 다음과 같은 파이썬 코드로 생성 :
이import tables as T
import time
exampleTableColumns = {
'id': T.Int32Col(pos=0),
'value': T.Float32Col(pos=1),
'timestamp': T.Time64Col(pos=2),
}
with T.openFile('time64-example.h5', 'w') as h5:
exampleTab = h5.createTable(
'/', 'example', exampleTableColumns)
# Add some test values
t = time.time()
for i in range(10):
exampleTab.row['id'] = i
exampleTab.row['value'] = i**2
exampleTab.row['timestamp'] = t + 0.5*i
exampleTab.row.append()
exampleTab.flush()
IDL에서 읽기에서 내 시도이다 : 그것은 이미 값을 사용자 정의 데이터 유형을 얻을 수 있지만, 일단
fid = h5f_open(filename)
exampleTab = H5D_OPEN(fid, '/example')
; id: 32 bit signed integer, value: float32, timestamp: 8 byte value
struct = {id:0L, value:0.0, timestamp:0LL}
dt = H5T_IDL_CREATE(struct)
exampleData = H5D_READ(exampleTab, dt)
print, 'exampleData.id:', exampleData.id
print, 'exampleData.value', exampleData.value
print, 'exampleData.timestamp', exampleData.timestamp
h5d_close, exampleTab
h5f_close, fid
가 H5D_READ
더 이상 질식하지 않습니다 id
및 value
필드의 값이 왜곡됩니다. 이 인쇄 문에서 내가 얻을 출력 : 나는에 struct
을 변경하는 경우
exampleData.id: 0 0 0 1095914052 174536304 153749104 0 172915600 1095914052 910565433
exampleData.value 0.000000 0.000000 0.000000 13.1451 0.000000 0.000000 0.000000 0.000000 13.1451 640.894
exampleData.timestamp 0 0 0 3833484811918717440 5858206660165639 153997792
5858318295760901 154274128 4051322254670378805 5858331130331138
(I 동등한 정의를 믿는 것이 무엇) struct = {id:lonarr(1), value:0.0, timestamp:0LL}
, 인쇄 문이 얻을 :
exampleData.id: 262404320 3 262404416 4 262404512 14 0 172915600 1095914052 910565433
exampleData.value 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 13.1451 640.894
exampleData.timestamp 0 0 0 3833484811918717440 0 153997568
5858318295760901 154274128 4051322254670378805 791781549539330
Time64 열을 포함하는 파일을 다운로드 할 수 있습니까? – mgalloy
예시적인 hdf5 파일 링크 : http://ubuntuone.com/3agm00xGNP9nKbcYJn90oD – bdoering
필드가 왜곡되어 있습니까? 'print' 결과물을 볼 수 있습니까? 'H5Tpack'이 복합 형에서 호출되었는지 알고 있습니까? –