I have an array of length 256. It has either 0's and 1's of type uint8. I would like to concatenate it so that it occupies less memory and then recover the original array back. please check the eaxample
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
x = [1 0 1 1 1 0 0 1...........1] % uint8. length = 256. size = 256*8 = 2048 bytes
xbin = 1011100...........1 % binary form. 256 bits or 32 bytes
% from 'xbin', I need to recover 'x' and store it in variable 'y' in 'uint8' format
y = [1 0 1 1 1 0 0 1] % uint8. length = 256. size = 256*8 = 2048 bytes
1 commentaire
Stephen23
le 13 Fév 2015
Modifié(e) : Stephen23
le 13 Fév 2015
Actually a uint8 vector with 256 elements is only 256 bytes:
>> X = round(rand(1,256)); % double
>> Y = uint8(rand(1,256)); % uint8
>> whos('X','Y')
Name Size Bytes Class Attributes
X 1x256 2048 double
Y 1x256 256 uint8
You seem to be counting bits, not bytes.
Réponse acceptée
Image Analyst
le 13 Fév 2015
You're dealing with 2048 bytes and you're worried about memory???? Oh well, anyway...
Try this:
% Generate sample 256 long array of 1's and 0's.
x = randi(2, 1, 256)-1
% Convert to a string.
charx = dec2bin(x)'
% Extract every group of 8 characters into a uint8 number.
for k = 1 : length(charx)/8
numbers(k) = uint8(bin2dec(charx(1+(k-1)*8 : k*8)));
end
% Print to command window.
numbers
Plus de réponses (1)
Stephen23
le 13 Fév 2015
Modifié(e) : Stephen23
le 13 Fév 2015
You could do this in just two lines by converting the vectors of 0 & 1 to uint32 values:
>> A = uint8(randi(2,1,256)-1);
>> B = num2cell(reshape(double(A),[],32),2);
>> C = cellfun(@(b)uint32(sum(pow2(b,31:-1:0))),B);
>> whos('A','C')
Name Size Bytes Class Attributes
A 1x256 256 uint8
C 8x1 32 uint32
The reverse conversion is even easier:
>> D = uint8(rem(floor(bsxfun(@pow2,double(C),-31:1:0)),2));
>> D = D(:).';
And we can confirm that this gives exactly the same uint8 vector:
>> find(D~=A)
ans = Empty matrix: 1-by-0
Voir également
Catégories
En savoir plus sur Numeric Types dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!