MATLAB: How to group elements of a logical array

binarycellcell arrayslogical arraynested cells

Hello,
I have a logical array of size 64×256. I want the result to be a cell array of size 64×16 where each cell has 16 bit data.I have attached an image of my data for reference.
For eg: Let T be the logical array
T= 0 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 0 0
0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0
0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 1 0 0 1
0 0 0 0 0 0 1 0 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1
I want an output such that the cell data are grouped into 16 bit binary data as follows
T1='0000001011000010' '0000000101011100' '0000000111001100'
'0000001101111110' '0000000111000110' '0000001101000000'
'0000001110111111' '0000000011001101' '0000000110111010'
'0000001101101010' '0000001000011000' '0000001011101001'
'0000001011101011' '0000000001000011' '0000001010000101'
I tried reshape array but error message is shown.How to do it? Please help…Thanks in advance…

Best Answer

You could use mat2cell and sprintf like this:
T = [0,0,0,0,0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,...
0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0;...
0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,...
1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0;...
0,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,...
1,1,0,0,1,1,0,1,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0;...
0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,0,0,0,0,0,0,0,1,0,...
0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1;...
0,0,0,0,0,0,1,0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,...
0,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1];
S = size(T);
X = mat2cell(T,ones(1,S(1)),16*ones(1,S(2)/16));
Y = cellfun(@(v)sprintf('%i',v), X, 'UniformOutput',false);
Which produces two useful cell arrays:
>> X
X =
[1x16 double] [1x16 double] [1x16 double]
[1x16 double] [1x16 double] [1x16 double]
[1x16 double] [1x16 double] [1x16 double]
[1x16 double] [1x16 double] [1x16 double]
[1x16 double] [1x16 double] [1x16 double]
>> Y
Y =
'0000001011000010' '0000000101011100' '0000000111001100'
'0000001101111110' '0000000111000110' '0000001101000000'
'0000001110111111' '0000000011001101' '0000000110111010'
'0000001101101010' '0000001000011000' '0000001011101001'
'0000001011101011' '0000000001000011' '0000001010000101'