Matlab - найти индекс ячейки по ее значению

У меня есть массив ячеек filedNames 11x1, в котором каждая ячейка представляет собой одну строку, и я хочу получить индекс ячейки, равный имени строки.

Я нашел этот пример:

C = { {'a'}, {'b'}, {'c'}, {'a'}, {'a'} } % data
idx = find(strcmp([C{:}], 'a')) % single line engine

Однако, когда я применяю это к своему делу:

find(strcmp([fieldNames{:}], 'b_h_epsQ_h'))

Ничего не происходит, и сама по себе функция strcmp([fieldNames{:}], 'b_h_epsQ_h') не находит соответствия, хотя если я наберу strcmp([fieldNames{2}], 'b_h_epsQ_h') ответ будет 1.

Я привязал транспонирование массива ячеек, как в примере с 1x5, все еще безуспешно.


person Konstantin    schedule 03.11.2014    source источник
comment
этот пример представляет собой массив ячеек, содержащий массивы ячеек (вложенные). У вас просто массив ячеек строк. Итак, попробуйте: strcmp(fieldNames, 'b_h_epsQ_h')   -  person Amro    schedule 03.11.2014


Ответы (3)


Используйте следующее:

idx = strcmp(fieldNames, 'b_h_epsQ_h')
find(idx)

Пример:

>> fieldNames = {'a', 'b', 'c', 'd', 'e'};
>> idx = strcmp(fieldNames, 'c')
idx =
     0     0     1     0     0
>> find(idx)
ans =
     3
person Amro    schedule 03.11.2014

Попробуй это:

index = zeros(1,length(fieldNames))
for i = i:length(fieldNames)
    if find(strcmp([fieldNames{:}], 'b_h_epsQ_h')) == 1
        index[i] = 1
    end
end

Если вы хотите немедленно выйти после того, как найдете совпадающую строку, добавьте «разрыв» в предложении «если» после «индекс = i».

person Steve Eckert    schedule 03.11.2014

Вы также можете попробовать:

idx = cellfun(@(x)strcmp(x,'c'), C);
person YHyatt    schedule 03.11.2014