我正在處理來自串行設備的數據,它以非常有趣的格式輸出其數據。該器件具有一個256x256像素陣列,而每個像素都具有一個值,可通過移位寄存器讀出。將十六進制值的行轉換爲二進制,垂直列
要顯示的格式,我將舉例說明,因爲它會看,如果每個像素有一個6位值:
'Pixel #' 0-8 9-16 17-24 25-32 33-40 41-48 48-56 57-64 ... 256 -------------------------------------------------------------- 0 255 255 255 255 255 255 255 255 ... 1 127 255 255 255 255 255 255 255 ... 2 255 255 255 255 255 255 255 255 ... 3 255 255 255 255 255 255 255 255 ... 4 255 255 255 255 255 255 255 255 ... 5 255 255 255 255 255 255 255 255 ... Note that the 2nd row starts with a value of 127
要獲得1像素的6位值(像素#0),必須出現以下情況:
- 行的每個值需要被作爲它的二進制/位等效
- 垂直讀處理時,對齊位從每一行,6行向下(對於6比特輸出值),結果在該象素
的值即:
'Pixel #' 0-8 9-16 17-24 25-32 ... 256 -------------------------------------------------------------- 0 *1*1111111 11111111 11111111 11111111 ... 1 *0*1111111 11111111 11111111 11111111 ... 2 *1*1111111 11111111 11111111 11111111 ... 3 *1*1111111 11111111 11111111 11111111 ... 4 *1*1111111 11111111 11111111 11111111 ... 5 *1*1111111 11111111 11111111 11111111 ... Note that the 2nd row had a value of 127, which is 01111111 in binary --> Pixel 0 = 101111 = 47
現在,重複在所有256列,然後向下移動到下6行並重復。
實際輸出需要是256x256像素值的數組。我需要處理的實際數據集是每個像素14位 - 它是3584x32(14位* 256像素= 3584行...和32字節* 8位/字節= 32字節)。
什麼是處理數據集的最佳方法?另外,速度是至關重要的,那麼是否有一些高速功能可以被利用?
感謝幫助 - 謝謝!
編輯:
回答有關所需的速度問題 - 在理想情況下,我想執行此至少10倍/秒,因爲數據是在60倍/秒到來英寸因此,我認爲我需要避免常見的「連接」和字符串操作,因爲我認爲這些操作非常緩慢。
再次,真實數據集(3584x32)每個像素有14位,所以它是3584x32。
這裏是我工作的功能,採用Joran的方法,該方法〜2.6秒時,與真實的數據集提供給執行:
def GetFrame(RawData):
if np.shape(RawData) == (3584, 32):
ProcessedData = np.zeros((256, 256), dtype='int16')
data_blocks = [RawData[d:d+14] for d in range(0, 3584, 14)]
for p in range(256):
data_bin_rows = ["".join(map(lambda val:"{0:08b}".format(val,), row)) for row in data_blocks[p]]
ProcessedData[p][:] = [int("".join(v),2) for v in zip(*data_bin_rows)]
return ProcessedData
else:
return False
那怎麼可以做出更快的得到執行時間下來?謝謝!
你幾乎肯定會由I /在這種情況下限制○設備,數字轉換不是很複雜 –