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'