How to use if statement in cells
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Abirami
el 2 de Feb. de 2015
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 128x17 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
1 comentario
Jan
el 2 de Feb. de 2015
What does this mean:
Final={ S1 if B{i}=11
S1 if B{i}=10
S2 if B{i}=01
S2 if B{i}=00
Using a personally invented syntax is useful if you explain the meaning. E.g. what is "01"? Is this a [1x2] CHAR vector or a [1x2] uint8 or logical vector? What are "2 bit binary values" and how do you store them? Where does the "128x17 cell" occur in your code? What type do S1 and S2 have?
Currently a reader have to guess to many details.
Respuesta aceptada
Stephen23
el 2 de Feb. de 2015
Editada: Stephen23
el 2 de Feb. de 2015
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))
3 comentarios
Stephen23
el 19 de Feb. de 2015
Editada: Stephen23
el 19 de Feb. de 2015
Which "resulting cell" do you mean? Do you mean the output Z, which is not a cell array, but rather a numeric array ? If this is the case, then please add a comment showing the input values that caused these zeros to occur. I can't read minds, and I don't know what your data looks like.
The code X>1.5 compares whatever compares X with 1.5, and returns a true value for every element of X is greater than 1.5. This is used to allocate the elements of input array B to either S1 or S2.
Más respuestas (0)
Ver también
Categorías
Más información sobre Cell Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!