这是问题所在:
1)假设我有一些测量数据(比如从我的电子设备中读取的 1Msample),我需要通过处理链处理它们。
2)这个处理链由不同的操作组成,可以交换/省略/具有不同的参数。一个典型的例子是获取这些数据,首先通过查找表传递它们,然后进行指数拟合,然后乘以一些校准因子
3) 现在,由于我不知道哪种算法最好,我想在每个阶段评估最佳可能实现(例如,LUT 可以通过 5 种方式生成,我想看看哪一种是最好的)
4)我想菊花链这些功能,我会构造一个包含顶级算法的“类”并拥有(即指向)子类,包含较低级别的算法。
我正在考虑使用双链表并生成如下序列:
myCaptureClass.addDataTreatment(pmCalibrationFactor(opt, pmExponentialFit (opt, pmLUT (opt))))
其中 myCaptureClass 是负责数据采集的类,它也应该(在采集数据之后)触发顶级数据处理模块 (pm)。该处理将首先深入到底部子级(lut),在那里处理数据,然后是中间(expofit),然后是顶部(califactors)并将数据返回给捕获,捕获将数据返回给请求者。
现在这有几个问题:
1)网上到处都说在python中不应该使用双链表 2)这在我看来效率很低,因为数据向量很大,因此我更喜欢使用生成器函数的解决方案,但我不确定如何提供“插件式”机制。
有人可以给我一个提示如何使用“插件样式”和生成器来解决这个问题,这样我就不需要处理 X 兆字节数据的向量并在使用生成器函数时“按需”处理它们是正确的?
多谢
大卫
问题的补充:
看来我并没有准确地表达自己。因此:数据由插入 VME crate 的外部硬件卡生成。它们在单个块传输中“获取”到存储在 myCaptureClass 中的 python 元组。
要应用的操作集实际上是在一个流数据上,由这个元组表示。甚至指数拟合也是流操作(它是应用于每个样本的一组可变状态过滤器)。
我错误地显示的参数'opt'是为了表达,每个数据处理类都有一些配置数据,并修改用于操作数据的方法的行为。
目标是在 myCaptureClass 中引入一个菊花链类(而不是函数),当用户请求数据时,我们用来将“原始”数据处理成最终形式。
为了“节省”内存资源,我认为使用生成器函数来提供数据可能是个好主意。
从这个角度来看,似乎与我想做的最接近的匹配显示在 bukzor 的代码中。我更喜欢有一个类实现而不是函数,但我想这只是在特定类中实现调用运算符的装饰性东西,它实现了数据操作......