Binary numbers into array
6 次查看(过去 30 天)
显示 更早的评论
I have a string n of N numbers (like '21325231214523234322' ) and their respective Huffman code ( {'10' } {'01' } {'00' } {'110' } {'111' } )
I would like to create an array with all the stream bits (01 10 00 ...)
stream = zeros(1,N);
for i=1:N
value = str2num(n(i));
stream(i) = str2num(ret{3,value});
end
where ret is a cell array with values, probabilities and then the Huffman codes.
This is not working because the codes starting with 0 will be converted to numbers and the 0s are lost (01 -> 0 , 00 -> 0).
Moreover,
stream(i) = ret{3,value};
is also not working: Unable to perform assignment because the left and right sides have a different number of elements.
How can I create my array?
0 个评论
采纳的回答
Rosario Frontino
2022-3-27
编辑:Rosario Frontino
2022-3-27
1 个评论
Voss
2022-3-27
This solution relies on the numbers being integers starting with 1, so that you can use them as indices.
What happens if your numbers are like this? (Hint: an error occurs)
n = '76870786769078789877';
ret = { ...
'6' '7' '8' '9' '0'; ...
0.5 0.3 0.1 0.05 0.05; ...
'10' '01' '00' '110' '111'}
try
bitStream = {};
N = numel(n);
for i=1:N
value = str2num(n(i));
bitStream(i) = ret(3,value);
end
catch ME
disp(ME.message);
end % error:
No error occurs in this case with my answer:
[~,idx] = ismember(n,[ret{1,:}]);
bitStream = ret(3,idx)
更多回答(1 个)
Voss
2022-3-27
Depending on what exactly you're after, one of these two very similar ways may work:
n = '21325231214523234322';
ret = { ...
'1' '2' '3' '4' '5'; ...
0.5 0.3 0.1 0.05 0.05; ...
'10' '01' '00' '110' '111'}
[~,idx] = ismember(n,[ret{1,:}]);
% 1) stream is a character array of '0's and '1's:
stream = [ret{3,idx}]
% or, 2) stream is a cell array of codewords:
stream = ret(3,idx)
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Large Files and Big Data 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!