我试图了解空间/时间/编程是否有优势将来自信号处理系统的数据存储为嵌套列表:
data[channel][sample]
data[sample][channel]
我可以对两者进行编码处理——我个人认为 1) 易于编写和索引 2)。但是,2) 更常见的是我的本地小组程序并存储数据(在 excel/csv 中或来自数据收集系统)。虽然很容易转置
dataA = map(list, zip(*dataB))
我想知道 1 比 2 是否存在任何存储或性能 - 甚至 - 模块兼容性问题?
1)我可以像这样循环
for R in dataA :
for C in R :
process_channel(C)
matplotlib.loglog(dataA[0], dataA[i])
时间或频率在哪里dataA[0]
,我是要绘制的其他频道
2)
for R in dataB :
for C in R
process_sample(C)
matplotlib.loglog([j[0] for j in dataB],[k[i] for k in dataB])
这在编程风格上看起来更糟。也许我错过了一个让这更容易的列表方法?我还开发了用于使用 dicts 的代码……但这确实与一般用途不同。所以我不太倾向于继续使用字典。虽然 dict 存储是
dataC = list(['f':0.1,'chnl1':100.0],['f':0.2,'chnl1':110.0])
或一些这样的。似乎更好地集成选项2更好。但是,我想了解当您希望处理通道然后采样时,使用选项 2) 时如何更好地编码?只需先转置矩阵,然后在选项 1) 空间中进行工作并将结果转回:
dataA = smoothing(dataA, smooth_factor)
def smoothing(d, s) :
td = numpy.transpose(d)
td = map(list, zip(*d))
nd=[]
for row in td :
col = []
for i in xrange(0,len(row)-step,step) :
col.append(sum(row[i:i+step]/step)
nd.append(col)
nd = numpy.transpose(nd)
return nd
虽然这种结构有效 - 一直来回转换看起来 - 嗯 - 效率低下。