ここに問題があります:
1)いくつかの測定データ(電子機器から読み取った1Mサンプルなど)があり、それらを処理チェーンで処理する必要があるとします。
2)この処理チェーンは、スワップ/省略/異なるパラメーターを持つことができるさまざまな操作で構成されています。典型的な例は、このデータを取得し、最初にルックアップテーブルを介してそれらを渡し、次に指数フィットを実行し、次にいくつかのキャリブレーション係数を乗算することです。
3)さて、どのアルゴリズムが最適かわからないので、各段階で可能な限り最良の実装を評価したいと思います(たとえば、LUTは5つの方法で作成でき、どれが最適かを確認したいと思います。 )。
4)これらの関数をデイジーチェーン化して、最上位のアルゴリズムを含む「クラス」を構築し、下位レベルのアルゴリズムを含む子クラスを所有(つまりポインティング)したいと思います。
私はdouble-linked-listを使用して、次のようなシーケンスを生成することを考えていました。
myCaptureClass.addDataTreatment(pmCalibrationFactor(opt、pmExponentialFit(opt、pmLUT(opt))))
ここで、myCaptureClassはデータ取得を担当するクラスであり、(データが取得された後)トップレベルのデータ処理モジュール(pm)をトリガーする必要があります。この処理は、最初に下位の子(lut)に深く入り、そこでデータを処理し、次に中間(expofit)、次に上位(califactors)になり、データをキャプチャに返します。これにより、データがリクエスターに返されます。
現在、これにはいくつかの問題があります。
1)ネット上のどこでも、Pythonでは二重リンクリストを使用すべきではないと言われています2)データベクトルが巨大であるため、これは非常に非効率的であるように思われます。したがって、ジェネレータ関数を使用したソリューションを好みますが、よくわかりません「プラグインのような」メカニズムを提供する方法。
誰かが「プラグインスタイル」とジェネレーターを使用してこれを解決する方法のヒントを教えてもらえますか?ジェネレーター関数を使用するときに正しいように、Xメガバイトのデータのベクトルを処理して「要求に応じて」処理する必要はありませんか?
どうもありがとう
デビッド
問題への補遺:
自分を正確に表現していなかったようです。したがって、データはVMEクレートに接続された外部HWカードによって生成されます。それらは、myCaptureClassに格納されているPythonタプルへの単一ブロック転送で「フェッチ」されます。
適用される一連の操作は、実際には、このタプルで表されるストリームデータにあります。指数フィットでさえストリーム操作です(これは、各サンプルに適用される可変状態フィルターのセットです)。
私が誤って示したパラメータ「opt」は、これらのデータ処理クラスのそれぞれに付属の構成データがあり、データの操作に使用されるメソッドの動作を変更することを表現するためのものでした。
目標は、myCaptureClassに(関数ではなく)デイジーチェーンクラスを導入することです。これは、ユーザーがデータを要求したときに、「生の」データを最終的な形式に処理するために使用されていました。
メモリリソースを「節約」するために、ジェネレータ関数を使用してデータを提供することをお勧めします。
この観点から、私がやりたいことに最も近いものがbukzorのコードで示されているようです。関数ではなくクラスの実装が欲しいのですが、これはデータ操作を実現する特定のクラスの呼び出し演算子を実装するための表面的なものにすぎないと思います。