10

学習課題として Python でハフマンの実装を書いています。可変長のハフマン コードをバッファ (またはファイル) に書き出すところまで来ました。Python によって実装されたビットストリーム クラスがないように見えるだけです。配列モジュールと構造体モジュールを見てきましたが、追加の作業なしでは必要なことをしていないようです。

少しゴーグルすると、このビットストリームの実装が見つかりました。これは、私が望んでいるものに似ています。Python 標準ライブラリに相当するビットストリーム クラスは本当にないのでしょうか?

4

4 に答える 4

13

標準ライブラリに何もないのは確かですが、bitstringモジュールは試しましたか? この種のアプリケーション向けに設計されており、安定しており、十分に文書化されているため、ニーズに合っていると思います。

構築、読み取り、スライスなどはすべてビット単位で行われ、純粋な Python です。過去に、ハフマンのコーディング例がそれを使って非常にうまくいっているのを見たことがあります。

もう 1 つの適切なオプションはbitarray です。これは機能はそれほど多くありませんが、C 拡張であるためかなり高速です。おまけとして、ソース パッケージの一部として配布される Huffman コーディング例があります。

于 2010-03-15T21:49:28.273 に答える
1

正しい。ビットストリーミングを必要とするstdlibのモジュールのほとんどは、詳細が隠された状態でCで記述されています。

于 2010-03-15T20:25:59.240 に答える
1

私はパーティーに少し遅れているかもしれませんが、このビットストリーム ライブラリがあります。

https://pypi.python.org/pypi/bitstream/2.0.3

于 2015-05-29T14:40:08.867 に答える
1

いいえ、私が知る限り、標準ライブラリにはビット整列操作を支援するものは何もありません。Python は細かいことをいじるようには設計されていません ^^...

ただし、バイト配列を使用して独自のビットストリーム ライターを簡単に作成できます。

>>> from array import array
>>> a = array("B")
>>> a.append(1) # 128
>>> a.append(0)
>>> a.append(0)
>>> a.append(0)
>>> a.append(1) # 8
>>> a.append(1) # 4
>>> a.append(1) # 2
>>> a.append(1) # 1
>>> print reduce(lambda m, n: (m << 1) + n, a, 0)
143

あなたはアイデアを得る...

于 2010-03-15T20:35:17.487 に答える