2

我试图了解空间/时间/编程是否有优势将来自信号处理系统的数据存储为嵌套列表:

  1. data[channel][sample]
  2. 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

虽然这种结构有效 - 一直来回转换看起来 - 嗯 - 效率低下。

4

0 回答 0