2010-03-15 4 views
7

학습 연습으로 Python에서 huffman 구현을 작성 중입니다. 내 가변 길이 허프 먼 코드를 버퍼 (또는 파일)에 쓰는 시점에 이르렀다. 파이썬에 의해 구현 된 비트 스트림 클래스가없는 것만 찾아야합니다! arraystruct 모듈을 살펴 봤지만 추가 작업 없이는 필요하지 않은 것 같습니다.Python Bitstream 구현

고글 비트가 this 비트 스트림 구현으로 바뀌 었습니다. 이는 내가 원하는 것과 비슷합니다. Python 표준 라이브러리에는 비교 가능한 비트 스트림 클래스가 실제로 있습니까?

답변

9

표준 라이브러리에는 아무 것도 없지만 bitstring 모듈을 사용해 보셨습니까? 꽤 많이 이런 종류의 응용 프로그램을 위해 설계된, 안정 및 well documented, 그래서 나는 그것이 당신의 필요에 맞게 생각합니다.

건설, 읽기, 슬라이싱 등은 모두 비트 단위로 수행되며 순수한 파이썬입니다. 허프만 코딩 사례가 과거에 꽤 성공적으로 코딩 된 것을 보았습니다.

또 다른 좋은 옵션은 bitarray입니다. 많은 기능이 없지만 C 확장으로 상당히 빨라질 수 있습니다. 보너스로 소스 패키지의 일부로 배포되는 허프만 코딩 예제가 있습니다.

+0

'비트 열'작동 정말 느리지 만. –

+0

@ Judge : 비트 문자열이 C 확장자와 함께 할 수있는 속도가 빠르지는 않지만, 순수 파이썬 (적어도 최신 버전은)에 대해서는 꽤 합리적이라고 생각합니다. 당신이 정말로 느린 곳에서 좋은 예를 들었다면, 저자 (저의 길입니다)가 그것을보고 싶어 할 것입니다. 시간이 소비되는 곳을 확인하기 위해 실제 사용 사례를 갖는 것이 항상 도움이됩니다. –

+0

죄송합니다. 가장 건설적인 의견이 아닙니다. 필자는 12 비트 정수형 셋 빗트의 큰 시퀀스를 추출하기 위해 빠른 스크립트를 작성해야했습니다. bitstring은 그 목적을 잘 수행했습니다 (즉, 파이썬 스크립트는 매우 빠르고 쉽게 작성되었습니다). 그러나 최종 결과는 느립니다. 그것은 다른 언어로 다시 작성되어 결국 응용 프로그램에 포함될 것입니다. 따라서 프로토 타입에 bitstring을 사용하여 얻은 결과에 만족합니다. –

1

수정. 비트 스트림을 필요로하는 stdlib의 모듈 대부분은 숨겨진 세부 사항과 함께 C로 작성됩니다.

1

아니요, 표준 라이브러리에는 비트 정렬 작업에 도움이되는 내용이 없습니다. 파이썬은

... 작은 물건 ^^ 바이올린하도록 설계되지 않았습니다하지만 당신은 쉽게 바이트 배열의 도움으로 자신의 비트 스트림 작가를 작성할 수

>>> 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 

당신은 아이디어를 얻을 ...