我正在处理来自串行设备的数据,它以非常有趣的格式输出数据。该设备有256x256像素阵列,而每个像素有一个14位值,用移位寄存器读出。在
为了显示格式,我将按照每个像素是否有一个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
要获得第一个像素(像素0)的6位值,必须执行以下操作:
即:
^{pr2}$现在,在所有256列中重复该操作,然后向下移动到下6行并重复。在
实际输出需要是256x256像素值的数组。我需要处理的实际数据集是每个像素14位-它是3584x32(14位*256像素=3584行。。。32字节*8位/字节=32字节)。在
处理数据集的最佳方法是什么?此外,速度是一个关键问题,那么是否有一些高速功能可以利用?在
感谢你的帮助-谢谢!在
编辑:
为了回答有关所需速度的问题-理想情况下,我希望至少执行10倍/秒,因为数据以60倍/秒的速度传入。因此,我认为我需要避免常见的'joins'和string操作,因为我认为这些操作非常慢。在
同样,真实的数据集(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
怎样才能更快地缩短执行时间?谢谢!在
使用numpy应该足够快,或者您需要使用assembler编写它:
我不得不读了几遍,但我想我明白了
无法用它的速度说话。。。但如果你一秒钟不做一百万次,这可能是合理的。。。无论如何,应该比串行读取快得多。。。在
相关问题 更多 >
编程相关推荐