Find a vector of string in a Cell array
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Hi all
Assume I have a cell array which is like a matrix like this Dataset=
{'DICL','Coating','Yes';
'DICL','Coating','No';
'DICL','Coating','Yes';
'DICL','Coating','NO'}
Now I want to find the index of a row of this array which is for example
uniquevalue={'DICL','Coating','NO'}
uniquevalue is another cell array which is like a 1*n array
When I wanted to convert the Dataset to Matrix with cell2mat,following error happened:
Error using cat: Dimensions of matrices being concatenated are not consistent.
Actually I wanted to convert these to cell arrays to the matrix and then use following statement
ind=strfind((NewstringsDataSet),(UniqueValuesSet(j,:)));
or
temp=find(strcmp(NewstringsDataSet,UniqueValuesSet(j,:)));
Are there any function in Matlab to find the index of a row of cell array
Best Regards Mojgan
1 comentario
Jan
el 29 de Abr. de 2013
Please post a complete copy of the error message and at least the line, which causes the error. Otherwise we cannot suggest an improvement for the relevant part of the code, but have to invent the algorithm from scratch. This decreases the chance, that our suggestion match your needs.
Respuesta aceptada
Andrei Bobrov
el 29 de Abr. de 2013
Editada: Andrei Bobrov
el 29 de Abr. de 2013
[~,i1] = ismember(Dataset,uniquevalue);
index = find(all(diff(i1,1,2)==1,2));
other variant:
Dataset = {
'DICL' 'Coating' 'Yes'
'DICL' 'Coating' 'No'
'DICL' 'Coating' 'YES'
'DICL' 'Coating' 'NO'};
uniquevalue = {'DICL' 'Coating' 'YES'
'DICL' 'Coating' 'NO'};
[~,~,c] = unique([Dataset;uniquevalue]);
s = size(Dataset);
M = reshape(c,[],s(2));
[ii,index] = ismember(M(1:s(1),:),M(s(1)+1:end,:),'rows');
out = [find(ii),index(ii)]
2 comentarios
Más respuestas (1)
Jan
el 29 de Abr. de 2013
Data = {'DICL','Coating','Yes'; ...
'DICL','Coating','No'; ...
'DICL','Coating','Yes'; ...
'DICL','Coating','NO'};
Search = {'DICL','Coating','NO'};
index = strcmp(Data(:, 1), Search(:, 1)) & ...
strcmp(Data(:, 2), Search(:, 2)) & ...
strcmp(Data(:, 3), Search(:, 3));
Or perhaps you want find(index).
2 comentarios
Jan
el 2 de Mayo de 2013
Editada: Jan
el 2 de Mayo de 2013
If you need the index instead of the logical index, you can append this line:
index = find(index)
Then, I think, my solution is much more direct. ismember and unique both performs an expensive sorting, but for large inout (perhaps 100'000 rows) this supports a much faster binary search of matching strings.
Ver también
Categorías
Más información sobre Characters and Strings 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!