Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用MATLAB实现bit快速解包_Matlab - Fatal编程技术网

用MATLAB实现bit快速解包

用MATLAB实现bit快速解包,matlab,Matlab,我有一个10位值的数组,它被压缩成连续的8位整数。在python中,我使用以下方法解包: def unpack_10bit(data, nx, ny): packed = np.frombuffer(data, dtype='uint8').astype('uint16') unpacked = np.zeros([ny, nx], dtype='uint16') unpacked.flat[::4] = (packed[::5] << 2) | (pack

我有一个10位值的数组,它被压缩成连续的8位整数。在python中,我使用以下方法解包:

def unpack_10bit(data, nx, ny):
    packed = np.frombuffer(data, dtype='uint8').astype('uint16')
    unpacked = np.zeros([ny, nx], dtype='uint16')

    unpacked.flat[::4] = (packed[::5] << 2) | (packed[1::5] >> 6)
    unpacked.flat[1::4] = ((packed[1::5] & 0b00111111) << 4) | (packed[2::5] >> 4)
    unpacked.flat[2::4] = ((packed[2::5] & 0b00001111) << 6) | (packed[3::5] >> 2)
    unpacked.flat[3::4] = ((packed[3::5] & 0b00000011) << 8) | packed[4::5]

    return unpacked
有没有改进MATLAB版本性能的建议?

此解决方案是:

packed= fread(f,h.nx*h.ny*1.25,'uint16');
unpacked= zeros(h.nx,h.ny,'uint16');

unpacked(1:4:end) = bitor(bitshift(packed(1:5:end),2),bitshift(packed(2:5:end),-6));
unpacked(2:4:end) = bitor(bitshift(bitand(packed(2:5:end),63),4),bitshift(packed(3:5:end),-4));
unpacked(3:4:end) = bitor(bitshift(bitand(packed(3:5:end),15),6),bitshift(packed(4:5:end),-2));
unpacked(4:4:end) = bitor(bitshift(bitand(packed(4:5:end),3),8),packed(5:5:end));
解包260万个值需要0.23秒。如果有人建议提高速度,那就太好了

此解决方案为:

packed= fread(f,h.nx*h.ny*1.25,'uint16');
unpacked= zeros(h.nx,h.ny,'uint16');

unpacked(1:4:end) = bitor(bitshift(packed(1:5:end),2),bitshift(packed(2:5:end),-6));
unpacked(2:4:end) = bitor(bitshift(bitand(packed(2:5:end),63),4),bitshift(packed(3:5:end),-4));
unpacked(3:4:end) = bitor(bitshift(bitand(packed(3:5:end),15),6),bitshift(packed(4:5:end),-2));
unpacked(4:4:end) = bitor(bitshift(bitand(packed(4:5:end),3),8),packed(5:5:end));

解包260万个值需要0.23秒。如果有人建议提高速度,那就太好了

,和是您正在寻找的函数。您可以使用与Python完全相同的索引技巧。请随意编写答案。我认为这是一个非常有趣的问题!,这就是你想要的功能。您可以使用与Python完全相同的索引技巧。请随意编写答案。我认为这是一个非常有趣的问题!当我在MATLAB中完成这一操作时,我恢复到了<代码> MEX < /C> C++函数,以获得所需的速度(在我的情况下,在100的情况下,数量级的改进)当我在MATLAB中这样做时,我恢复到<代码> MEX < /C> C++函数,以获得所需的速度(在我的情况下,在100的情况下,数量级的改进)