Effacer les filtres
Effacer les filtres

How to group elements of a logical array?

1 vue (au cours des 30 derniers jours)
Abirami
Abirami le 24 Mar 2015
Hello,
I have a logical array of size 64x256. I want the result to be a cell array of size 64x16 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...

Réponse acceptée

Stephen23
Stephen23 le 24 Mar 2015
Modifié(e) : Stephen23 le 24 Mar 2015
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'

Plus de réponses (1)

Guillaume
Guillaume le 24 Mar 2015
This may or may not be faster than Stephen's answer. Pick whichever you prefer:
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];
T1 = reshape(cellstr(char(reshape(T', 16, [])+'0')'), [], size(T, 1))'
outputs:
T1 =
'0000001011000010' '0000000101011100' '0000000111001100'
'0000001101111110' '0000000111000110' '0000001101000000'
'0000001110111111' '0000000011001101' '0000000110111010'
'0000001101101010' '0000001000011000' '0000001011101001'
'0000001011101011' '0000000001000011' '0000001010000101'

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by