Matlab: как проверить, что длина строки больше определенного числа

Я хочу проверить длину строки, которая содержит более 20 символов, если более 20, то будет возвращено 1, иначе будет возвращено 0 в матричной форме [n x 1]. Но теперь я получаю ответ [1x1]. Как мне изменить свой код в операторе if-else, чтобы получить ответ?

str = {'http://www.mathworks.com/matlabcentral/newsreader/view_thread/324182',
  'http://jitkomut.lecturer.eng.chula.ac.th/matlab/text.html',
  'http://www.ee.ic.ac.uk/pcheung/teaching/ee2_signals/Introduction%20to%20Matlab2.pdf'};

a = cellfun(@length,str)

if a > 20
'1'
else
'0'
end

Выход: а =

68
57
83


ans =

1

Я хочу, чтобы результат, скажем,

ans = 

1
1
1

person user3340270    schedule 28.02.2014    source источник


Ответы (3)


В Matlab вы можете просто использовать (оператор if не требуется):

a = cellfun(@length,str)
(a>20)'

Это даст вам:

a =

   68   57   83

ans =

   1
   1
   1
person herohuyongtao    schedule 28.02.2014

Поскольку в Matlab нет эквивалента тернарного оператора c (? :), вы можете использовать следующие два оператора, чтобы заменить оператор if then else и добиться того, что вы просите:

b(a==a)='0'  
b(a>20)='1'

Первая строка инициализирует результирующий массив, где все значения b по умолчанию устанавливаются на значение ветви else, т.е. '0', вторая строка изменяет элементы, для которых выполняется условное > 20, на значение в ветви then, т.е. '1'.

Если выходные значения являются логическими, вы можете просто сделать:

(a>20)

как предложил @herohuyongtao или использовать ответ @Dan.

person laser    schedule 28.02.2014

Как упоминает @herohuyongtao, вам на самом деле не нужен if, if будет рассматривать только первый элемент матрицы, который он возвращает, поэтому дает вам только одно значение.

Но на самом деле вы можете сделать все это в своем cellfun, используя анонимную функцию:

cellfun(@(x)(length(x) > 20), str)

И получить результат одним выстрелом.

person Dan    schedule 28.02.2014