python变长数组_python – 在PyTables中,如何创建可变长度的嵌套数组?

我使用PyTables 2.2.1 w /

Python 2.6,我想创建一个包含可变长度的嵌套数组的表.

我已经搜索了PyTables文档,教程示例(PyTables Tutorial 3.8)显示了如何创建一个length = 1的嵌套数组.但是在这个例子中,我将如何向数据“info2 / info3 / x”添加一个可变数量的行, ‘INFO2 / INFO3 / Y’?

为了可能更容易理解的表格结构,这里是我自己的例子:

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

我没有在PyTables文档中找到任何这样的结构是不可能的,但是如果这样的结构实际上是不可能的,那么我可以替代可变长度嵌套列的是什么?

> EArray? VLArray?如果是,如何将这些数据类型整合到上述结构中?

>其他一些想法?

任何帮助非常感谢!

编辑附加信息:

似乎PyTables大师已经解决了“是这样一个可能的结构”问题:

所以有人想出了一种创建类似PyTable数据结构的方法?

再次感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值