Binary numbers into array
5 ビュー (過去 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!