Если вы используете массив ячеек (мы назовем его data
), то я обычно использую cellfun
для такого рода работы.
C = cellfun(@(x) ~isempty(x) && ischar(x) && strcmp(x,'U') , data(:,2))
Это определяет анонимную функцию, которая возвращает true
для любого ввода, которое (1) не пусто, (2) массив символов и (3) имеет значение «U» и. Он вызывает эту функцию для каждого элемента во втором столбце data
и возвращает ее в массиве C
.
Мне нравится, что он подходит для одной операции в одной строке. Его легко прочитать после того, как вы используете конструкцию достаточно много раз (но, возможно, не так просто прочитать первые несколько раз).
Более типичным (и, возможно, более простым для понимания) решением является использование цикла.
C = logical(zeros(size(data,1),1)); %Always preallocate your results vector
for ix = 1:size(data,1)
curValue = data{ix,2}l
C(ix) = ~isempty(curValue ) && ischar(curValue ) && strcmp(curValue ,'U');
end
Наконец, похоже, что вы действительно хотите вернуть свой результат в исходный массив ячеек в третьем столбце. Это небольшое изменение в приведенном выше цикле, например:
for ix = 1:size(data,1)
curValue = data{ix,2};
data{ix,3} = ~isempty(curValue) && ischar(curValue) && strcmp(curValue ,'U');
end
EDIT
Если ваши данные находятся в массиве ячеек (на основе недавнего комментария), попробуйте:
C = mydata{2} == 'U';
Это извлекает массив символов и сравнивает каждый элемент с символом 'U'
.