サンプルはFloat
で構成されています。私が書いたアルゴリズムの中には、信号がx軸を横切るとき(つまり、正の値を負の値に、逆もまた同様)に知る必要があります。私がこれらの操作をしているとき、私は実際のFloat
の値を知る必要はないことに気付きました。私は、サンプルの価値が肯定的であるかどうかを知る必要があります。バイナリデータのコレクションの表現
私はもともとVector
がFloat
の信号を表していました。私の発見後、Vector
の値がBoolean
(つまり、負の値はFalse
、正の値はTrue
)と表示され始めました。これははるかに効率的であることが判明し、ランタイムとメモリ消費の両方でプログラムのパフォーマンスを改善しました。
私は、この「バイナリデータのコレクション」をより効率的に表現する方法がないのかどうか疑問です。 Bit Vector
またはBit Array
のようなものです。私はHackageでBitArrayを見つけましたが、Vector
と同じ機能をサポートしていないようです。
私のユースケースのデータをより効率的に表現する方法はありますか?Vector
をBoolean
の値に固定する必要がありますか?
「ベクター」のどの機能が必要ですか? –
@WillemVanOnsem標準的なHaskell Listプリミティブ(マップ、フォールド、フィルターなど)私は 'V.generate'を使ってすべてのサンプルを読み込んでファイルを作成します。 –
C++の標準ライブラリには、スペース効率のためにバイトの完全な内容を使用する[bool'](http://en.cppreference.com/w/cpp/container/vector_bool)のテンプレート特殊化が含まれていますが、これは[今は広く考えられている](https://isocpp.org/blog/2012/11/on-vectorbool)。このようなベクトルの場合、パフォーマンスは実質的に悪くなる傾向があります。これは、要素アクセスをポインタ演算で直接実行できないためです。 - 連続した信号の符号のみを効率的に表現したい場合は、符号が変化するところに_spotsだけを格納することを検討する必要があります。 – leftaroundabout