2

値のデータセットdouble(1024 x 1024 マトリックス) があります。lz4このデータを圧縮するために圧縮アルゴリズムを使用することを考えています。圧縮後、このデータをサーバーに送信し、サーバー側で何らかの処理を行ってローカル マシンに戻す必要があります。私は圧縮に不慣れで、ほとんど混乱していません。

最初にこれらのdouble値をファイルまたはその他の形式に入れてから圧縮する必要がありますか、それともファイルまたはその他の形式に入れずに直接値を圧縮できますか?

次に、圧縮以外の推奨事項があれば、lz4共有してください。

4

4 に答える 4

2

一般に、マシン間でデータを送信するときはいつでも、データを標準形式に変換する必要があります。これは、マーシャリングまたはシリアライズと呼ばれます。そうしないと、2 つのマシンで数値の表現が異なる場合、データを受信したときにデータが正しく解釈されません。ただし、2 つのマシンが同じバイナリ表現を使用していることがわかっている場合は、バイナリ データ自体を送信するだけでかまいません。

圧縮アルゴリズムは通常、バイト配列またはストリームで機能します。char(*)ただし、double の行列のアドレスは、圧縮関数に渡す前に にキャストできます。

ただし、double を圧縮することでどれだけのメリットが得られるかは明らかではありません。圧縮アルゴリズムは、一般的なバイト シーケンスを見つけて、それらを短いプレースホルダーに置き換えることに依存しています。バイナリ データには、依存する種類の冗長性がない場合があります。

于 2015-01-09T00:40:52.873 に答える
1

Lempel-Ziv などのさまざまな圧縮アルゴリズムはロスレスです。元のデータのパターンを探し、潜在的に少ないバイト数でデータを表現します。解凍すると、正確な元のデータ全体が再構成されます。

一部の圧縮方法は、.jpeg および .mpge ファイルで使用されるような不可逆です。

数値データの圧縮は、LZ などのロスレス方式を使用して問題なく機能します。コードをさらに圧縮したい場合は、 への単純な変換を検討してくださいfloat。もちろんfloat、通常は範囲と精度が低下します。これらの影響が許容できる場合、この損失のある事前圧縮によりfloat、元のサイズが少なくとも半分になり、より高い圧縮率が得られる可能性があります。

圧縮では、最初にファイルに書き込む必要はありません。圧縮はコード内で実行できます。

compressクリーバー メソッドには、や などの外部プロセスを介してデータをパイプすることが含まれますuncompress

于 2015-01-09T02:31:34.340 に答える