Matlab では、任意のビット長の符号なし整数 (3 ビット整数の配列など) を uint8 の配列にパックしようとしています。hereのヒントがあれば、 「小さな」配列 (たとえば 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 はそれほど効率的ではないことも読みました。
これを 16mil 要素 (8 GB のメモリを搭載した 64 ビット Windows ボックス) で試すと、すべてのメモリが消費されます。何とか。したがって、サブセクションをループすると、16mil の要素を完了するのに約 10 分かかります。だから、何かが非常に非効率的です。
python の BitArray のようなビット文字列を生成するより良い方法はありますか?
ありがとう、