我的示例代码是在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)...]
这样做是否有“标准”方式?
答案 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数组。