MATLAB: How to use if statement in cells

binarycellcell arraysmatrix

Hello I have doubts in using if condition in matlab.I have to perform the following operation in a cell.
Final={ S1 if B{i}=11
S1 if B{i}=10
S2 if B{i}=01
S2 if B{i}=00
I have the 2 bit binary values as a 128×17 cell. How to perform this and create a new matrix Z where i get the values of S1 and S2.
B= 00 10 11 10 11
01 01 01 01 11
10 00 01 00 01
10 10 01 01 11
10 10 10 00 10
and if
S1= 21
23
28
25
43
S2= 96
85
78
65
76
For each binary value, the corresponding S value should be present.So my Z would be
Z = s2 s1 s1 s1 s1
s2 s2 s2 s2 s1
s1 s2 s2 s2 s2
s1 s1 s2 s2 s1
s1 s1 s1 s2 s1
ie Z= 96 21 21 21 21
85 85 85 85 23
28 78 78 78 78
25 25 65 65 25
43 43 43 76 43
ie; with the values of S1 and S2, the data in B is to be replaced.please help. thanks in advance

Best Answer

It is not clear exactly what format your "binary" data are in, I assumed that they are strings. This script creates the matrix Z as you indicate:
B = {'00','10','11','10','11';...
'01','01','01','01','11';...
'10','00','01','00','01';...
'10','10','01','01','11';...
'10','10','10','00','10'};
S1 = [21;23;28;25;43];
S2 = [96;85;78;65;76];
%
C = cellfun(@bin2dec,B)>1.5;
[r,~] = find(C);
Z(C) = S1(r);
[r,~] = find(~C);
Z(~C) = S2(r);
Z = reshape(Z,size(C))
When I run the script, it display this in my command window:
Z =
96 21 21 21 21
85 85 85 85 23
28 78 78 78 78
25 25 65 65 25
43 43 43 76 43
EDIT: For slightly more compact code, this is equivalent:
C = cellfun(@bin2dec,B)>1.5;
Z(C) = S1(1+rem(find(C)-1,size(C,1)));
Z(~C) = S2(1+rem(find(~C)-1,size(C,1)));
Z = reshape(Z,size(C))
Related Question