Logical indexing in cell array

240 Ansichten (letzte 30 Tage)
matuser123
matuser123 am 14 Okt. 2016
Is there a way to search strings in a cell array similar to numeric arrays?
a = [1 2 3 4 5 6];
>> idx = find(a==3)
idx = 3
>> b = {'1' '2' '3' '4' '5' '6'};
>> idx = find(b=='3')
Undefined function 'eq' for input arguments of type 'cell'.

Akzeptierte Antwort

Image Analyst
Image Analyst am 14 Okt. 2016
Use ismember to search cell arrays:
b = {'1' '2' '3' '4' '5' '6'};
logicalIndex = ismember(b, '3') % Or...
actualIndex = find(ismember(b, '3'))

Weitere Antworten (3)

Ganesh Hegade
Ganesh Hegade am 14 Okt. 2016
Hi, You can use this
strcmp(b, '3');
  1 Kommentar
matuser123
matuser123 am 14 Okt. 2016
Great! Thanks.
find(strcmp(b,'3')==1)

Melden Sie sich an, um zu kommentieren.


michio
michio am 14 Okt. 2016
Using cellfun is one way.
b = {'1' '2' '3' '4' '5' '6'};
cellfun(@(x) strcmp(x,'3'), b)
  1 Kommentar
michio
michio am 14 Okt. 2016
Aha, strcmp does accept cell array. Thank Ganesh.

Melden Sie sich an, um zu kommentieren.


Sulaymon Eshkabilov
Sulaymon Eshkabilov am 4 Jul. 2021
Now, what michio suggested works perfectly ok:
b = {'1' '2' '3' '4' '5' '6'};
b(cellfun(@(x) strcmp(x,'3'), b))={'Found 3'}
So this is another good solution for this exercise.

Kategorien

Find more on Matrices and Arrays in Help Center and File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by