在Matlab 中,我试图将任意位长度的无符号整数(例如,3 位整数数组)打包成一个uint8 数组。鉴于此处的提示,我可以生成适用于“小型”数组(例如 10,000 个元素)的代码,但它会占用大型数组(例如 1600 万个元素)的所有内存。我使用的代码如下,借鉴了以前的帖子:
function x_bytes = stuff_bits(x, n)
r = dec2bin(x,n); % bitstring for each uint in x
s = reshape(r',[],1); % one continuous string of bits
t = reshape(str2num(s),8,[])'; % array of 8-bit numbers (stuffed)
u = t*(2.^(size(t,2)-1:-1:0))'; % array of bytes representing all the bits stuffed together
x_bytes = uint8(u); % should be compressed byte stream
end
我意识到我正在使用一个 uint,将其转换为字符串,然后将其转换回位;我还读到 dec2bin 效率不是很高。
当我用 1600 万个元素(在具有 8 GB 内存的 64 位 Windows 机器上)尝试这个时,所有内存都被消耗掉了。废话。所以我循环遍历小节,完成 1600 万个元素大约需要 10 分钟。所以,有些东西是非常低效的。
有人有更好的方法来生成像 python 的 BitArray 这样的位字符串吗?
谢谢,