我的示例代码在 python 中,但我问的是一般原则。
如果我有一组时间-值对数据,我应该将它们存储为二维数组还是元组列表?例如,如果我有这些数据:
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]
像这样存储它通常更好吗:
data=[v,t]
或作为元组列表:
data=[(1,1),(4,2)(4,3)...]
有这样做的“标准”方式吗?
我的示例代码在 python 中,但我问的是一般原则。
如果我有一组时间-值对数据,我应该将它们存储为二维数组还是元组列表?例如,如果我有这些数据:
v=[1,4,4,4,23,4]
t=[1,2,3,4,5,6]
像这样存储它通常更好吗:
data=[v,t]
或作为元组列表:
data=[(1,1),(4,2)(4,3)...]
有这样做的“标准”方式吗?
如果速度是您最关心的问题,那么在 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
聚合数组容器可能是最好的选择。假设您的时间点不是定期间隔的(因此您需要跟踪它而不仅仅是使用索引),这允许您对整个数据集进行切片,例如:
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]])
你可以试试字典?在其他语言中,这可能被称为哈希映射、哈希表、关联数组或其他具有相同含义的术语。当然,这取决于您打算如何访问您的数据。
代替:
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 中相当标准的结构,尽管如果顺序很重要,您可能需要查看collections中的有序字典。
我发现对于探索和原型设计,存储为列的列表/锯齿状数组更方便,其中第一列是观察索引,之后的每一列都是变量。
data=[(1,2,3,4,5,6),(1,4,4,4,23,4)]
Most of the time i'm loading many observations with many variables, and then performing sorting, formatting, or displaying one or more of those variables, or even joining two sets of data with columns as parameters. It's a lot rarer when I need to pull a subset of observations out. Even if I did, it's more convenient to use a function that returns a subset of the data given a column of observation indexes.
Having said that, I still use functions to convert jagged arrays to 2d arrays and to transpose 2d arrays.