PyTables 2.2.1 (Python 2.6 포함)을 사용하고 있으며 가변 길이의 중첩 배열이 포함 된 테이블을 만들고 싶습니다.PyTables에서 가변 길이의 중첩 배열을 만드는 방법은 무엇입니까?
저는 PyTables 문서를 검색했으며 튜토리얼 예제 (PyTables Tutorial 3.8)는 길이가 1 인 중첩 배열을 만드는 방법을 보여줍니다.하지만이 예제에서는 데이터 'info2/info3에 가변 개수의 행을 추가하는 방법은 무엇입니까?/x '및'info2/info3/y '? 아마도 쉽게 이해하는 테이블 구조에 대한
, 여기 내 자체 개발 한 예이다 : 나는 그런 구조가 가능하지 않은 PyTables의 문서에있는 표시를 발견하지 않았습니다
"""Desired Pytable output:
DIEM TEMPUS Temperature Data
5 0 100 Category1 <--||--> Category2
x <--| |--> y z <--|
0 0 0
2 1 1
4 1.33 2.67
6 1.5 4.5
8 1.6 6.4
5 1 99
2 2 0
4 2 2
6 2 4
8 2 6
5 2 96
4 4 0
6 3 3
8 2.67 5.33
Note that nested arrays have variable length.
"""
import tables as ts
tableDef = {'DIEM': ts.Int32Col(pos=0),
'TEMPUS': ts.Int32Col(pos=1),
'Temperature' : ts.Float32Col(pos=2),
'Data':
{'Category1':
{
'x': ts.Float32Col(),
'y': ts.Float32Col()
},
'Category2':
{
'z': ts.Float32Col(),
}
}
}
# create output file
fpath = 'TestDb.h5'
fh = ts.openFile(fpath, 'w')
# define my table
tableName = 'MyData'
fh.createTable('/', tableName, tableDef)
tablePath = '/'+tableName
table = fh.getNode(tablePath)
# get row iterator
row = table.row
for i in xrange(3):
print '\ni=', i
# calc some fake data
row['DIEM'] = 5
row['TEMPUS'] = i
row['Temperature'] = 100-i**2
for j in xrange(5-i):
# Note that nested array has variable number of rows
print 'j=', j,
# calc some fake nested data
val1 = 2.0*(i+j)
val2 = val1/(j+1.0)
val3 = val1 - val2
''' Magic happens here...
How do I write 'j' rows of data to the elements of
Category1 and/or Category2?
In bastardized pseudo-code, I want to do:
row['Data/Category1/x'][j] = val1
row['Data/Category1/y'][j] = val2
row['Data/Category2/z'][j] = val3
'''
row.append()
table.flush()
fh.close()
...하지만 경우에 이러한 구조는 실제로 불가능합니다. 가변 길이 중첩 열에 대한 대안은 무엇입니까?
- EArray? VLArray? 그렇다면 이러한 데이터 유형을 위의 구조에 통합하는 방법은 무엇입니까?
- 다른 아이디어가 있습니까?
모든 도움을 주시면 대단히 감사하겠습니다.
편집/추가 정보 W :
PyTables Mail Forum - Hierachical Datasets
그래서 사람이 유사한을 만드는 방법을 생각했습니다 PyTables 지도자가 이미는 "이러한 구조 가능하다"문제를 해결 한 것으로 보인다 PyTable 데이터 구조?
다시 한번 감사드립니다!
감사 : 행 당신이 당신의 DB에서 읽어 단일 행이 있다고 가정하자! 또한 메일 목록 링크에는 Francesc의 지혜에 대한 여러 가지 흥미로운 '덩어리'가 있습니다. 결국 나는 속도와 단순함을 염려했기 때문에 패딩 된 여분의 공간으로 고정 된 배열 크기를 선택했다. – plmcw