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

我的示例代码是在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)...]
有这种“标准”方式吗?     
已邀请:
聚合数组容器可能是最佳选择。假设您的时间点不是有规律的间隔(因此您需要跟踪它而不是仅使用索引),这允许您获取整个数据集的切片,如:
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]])
    
如果速度是你最关心的问题,那么在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
    
你可以试一本字典吗?在其他语言中,这可称为散列映射,散列表,关联数组或其他术语,意思相同。当然,这取决于您打算如何访问您的数据。 代替:
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中相当标准的构造,但如果顺序很重要,您可能希望查看集合中的有序字典。     
我发现,对于探索和原型设计,将列存储为列表/锯齿状列数更方便,其中第一列是观察索引,后面的每列都是变量。 数据= [(1,2,3,4,5,6),(1,4,4,4,23,4)] 大多数情况下,我正在使用许多变量加载许多观察,然后执行排序,格式化或显示这些变量中的一个或多个,甚至连接两列数据作为参数。当我需要提取一部分观察结果时,这种情况要少得多。即使我这样做,使用一个返回给定一列观察索引的数据子集的函数也更方便。 话虽如此,我仍然使用函数将锯齿状数组转换为2d数组并转换2d数组。     

要回复问题请先登录注册