search for a code in a cell

I want to find whether code [1 1 -1 -1] is present in a cell C in which C{1}=[1 1 1 1],C{2}=[1 1 -1 -1],C{3}=[1 -1 1 -1],C{4}=[1 -1 -1 1]. Also find out what is the location of the code.

 Respuesta aceptada

Evan
Evan el 18 de Feb. de 2015
Editada: Evan el 18 de Feb. de 2015

1 voto

key = [1 1 -1 -1]
C{1} = [1 1 1 1];C{2}=[1 1 -1 -1];C{3}=[1 -1 1 -1];C{4}=[1 -1 -1 1]
loc = find(cellfun(@(x)all(x == key),C));
You could also do this with a for loop, checking each cell of C one iteration at a time. cellfun effectively does this.

4 comentarios

ankit
ankit el 18 de Feb. de 2015
thankyou sir. Also sir, what should I do if I want to search for a) [1 1] in C b) [1 1 -1 -1 1 1 -1 -1] is containing elements which is a part of C
Stephen23
Stephen23 el 18 de Feb. de 2015
Editada: Stephen23 el 18 de Feb. de 2015
Try using strfind (yes, it also works on numeric arrays!).
ankit
ankit el 18 de Feb. de 2015
when i'm using strfind, there is an error showing as "If any of the input arguments are cell arrays, the first must be a cell array of strings and the second must be a character array." i'm using mat2cell([1 1 -1 -1]) and then comparing with C
Stephen23
Stephen23 el 19 de Feb. de 2015
Editada: Stephen23 el 19 de Feb. de 2015
strfind works on numeric arrays, and not on cell arrays containing numeric arrays. Try it with a simple numeric vectors first to see how it works. Although you have already accepted Evan's answer, this might be more what you are wanting:
cellfun(@(c)strfind(c,key), C)
Or if there might be multiple matches / non-matched entries:
cellfun(@(c)strfind(c,key), C, 'UniformOutput',false)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Etiquetas

Preguntada:

el 18 de Feb. de 2015

Editada:

el 19 de Feb. de 2015

Community Treasure Hunt

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

Start Hunting!

Translated by