时变数据:元组列表与2D数组?

时间:2011-04-11 15:24:35

标签: python scientific-computing

我的示例代码是在python中,但我问的是一般原则。

如果我在时间 - 值对中有一组数据,我应该将它们存储为2D数组还是作为元组列表?例如,如果我有这些数据:

v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]

通常最好将它存储起来:

data=[v,t]

或作为元组列表:

data=[(1,1),(4,2)(4,3)...]

这样做是否有“标准”方式?

4 个答案:

答案 0 :(得分:4)

如果速度是您最关心的问题,请在Python中查看Numpy。

通常,您应该选择一种数据结构,使数据处理变得自然而简单。在你知道它有效之后担心速度!

对于简单的数据结构,元组列表如何:

v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]

data=[(1,1),(4,2)(4,3)...]

然后你可以像这样解压缩:

v,t=data[1]
#v,t are 4,2

答案 1 :(得分:2)

聚合数组容器可能是最佳选择。假设您的时间点没有规则间隔(因此您需要跟踪它而不是仅仅使用索引),这样您就可以获取整个数据集的切片,如:

import numpy as np
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]

data = np.array([v,t])

然后你可以将它切片以轻松获得数据的子集:

data[:,2:4]  #array([[4, 4],[3, 4]])

ii = [1,2,5] # Fancy indexing
data[:,ii] # array([[4, 4, 4],
           #        [2, 3, 6]])

答案 2 :(得分:1)

你可以试一本字典吗?在其他语言中,这可称为散列映射,散列表,关联数组或其他术语,意思相同。当然,这取决于您打算如何访问您的数据。

而不是:

v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]
你有:

v_with_t_as_key = {1:1,  # excuse the name...
                   2:4, 
                   3:4, 
                   4:4, 
                   5:23, 
                   6:4} 

这是python中相当标准的构造,但如果顺序很重要,您可能需要查看dictionary中的有序collections

答案 3 :(得分:0)

我发现,对于探索和原型设计,以列表/锯齿状列数列存储更方便,其中第一列是观察索引,后面的每列都是变量。

数据= [(1,2,3,4,5,6),(1,4,4,4,23,4)]

大多数情况下,我正在使用许多变量加载许多观察结果,然后执行排序,格式化或显示这些变量中的一个或多个,甚至连接两组数据作为参数。当我需要提取一部分观察结果时,这种情况要少得多。即使我这样做,使用一个返回给定一列观察索引的数据子集的函数会更方便。

话虽如此,我仍然使用函数将锯齿状数组转换为2d数组并转换2d数组。