2013-07-15 4 views
0

아무도 헤더를 압축하고 일부 데이터 청크에 추가하는 방법에 대한 조언이 없습니까?파이썬에서 압축 된 헤더와 numpy 배열을 결합하십시오.

예를 들어, 16 바이트의 비트가 채워진 헤더를 약 2MB의 원시 RGB 이미지에 추가하려면이 작업을 수행하는 가장 효율적인 방법은 무엇입니까? STR과 NumPy와 배열이 concat'able이 arent 때문에

지금까지, 나는 다음과 같은

headerVals = (str(headerVersion), str(formatEnum), frameCount, ntpTimestamp, width, height) 
packedHdr = self.imgStruct.pack(*headerVals) 

return packedHdr + data 

그러나이 다음 오류와 함께 실패 시도했다 :

return packedHdr + data 
TypeError: cannot concatenate 'str' and 'numpy.ndarray' objects 

유일한 방법이 문제를 해결하는 나는 파이썬 초보자로서 다음과 같은 명백한 이유 때문에 매우 느리다는 것을 생각할 수있다 :

# Generate the header 
headerVals = (str(headerVersion), str(formatEnum), frameCount, ntpTimestamp, width, height) 

packDir = 'cchqhh{0}h'.format(width*height*3) 

return pack(packDir, str(headerVersion), str(formatEnum), frameCount, ntpTimestamp, width, height, *data) 

아이디어가 있으십니까? 파이썬 이니셔티브로서 나는 이것으로 약간 혼란 스럽다!

아래 세스의 제안에 따라, 나는이 다음에 내 코드를 업데이트하고 잘하고있다 : UPDATE

.

+0

왜 numpy 배열 안에'headerVersion'과'formatEnum'을 넣지 않고 연결하려고합니까? – seth

+0

나는이 접근법을 끝내고 작동하는 것처럼 보인다. 질문 – bgoldber

+0

에 변경 사항을 추가하십시오. 답변으로 내 의견을 기재하겠습니다. – seth

답변

1

헤더를 numpy 배열과 연결하려면 이진 형식의 배열이 있어야합니다. data 가정하면 int 배열입니다 : 데이터가 다른 종류의 경우

import struct 

raw_data = packedHdr + struct.pack('i' * data.size, *data) 

, 당신은 st.pack에 지정해야합니다. 그 결과 나타나는 raw_data을 원하는 형식으로 압축을 풀 수 있습니다.

+0

그럼이 방법이 효과적이지만 데이터가 데이터 뒤의 int.s에 blitted되기 때문에 효율이 좋지 않다고 생각하십니까? – bgoldber

+0

@bgoldber 실제로 메모리의 데이터를 두 배로 늘리지 만 원본 numpy 배열과 동일한 데이터 유형에 넣어야합니다 (그렇지 않으면 데이터 형식이 잘못된 형식으로 채워집니다!). 2Mb 이미지의 경우이 작업은 매우 사소하고 성능 문제는 미미해야합니다. – tiago

0

왜 numpy 배열 안에 headerVersionformatEnum을 넣지 않고 연결하려고합니까?

관련 문제