Как написать это более чисто в Matlab?

#matlab #lambda

#matlab #лямбда

Вопрос:

Я знаю, что должен быть более чистый и элегантный способ сделать это. У меня есть массив чисел в диапазоне [0,1], и я хочу проверить, какие из них превышают пороговое значение. Я помню, что был какой-то синтаксис, чтобы сделать это красиво. В python я бы использовал что-то вроде лямбда-функции.

 p = sigmoid(dot(theta,X));
for i =1:size(p)
   if(p(i)>=0.5)
      p(i)=1
   else
       p(i)=0
   end
end
  

Ответ №1:

mtrw на правильном пути, но он становится еще короче:

 p = (p >= 0.5);
  

Комментарии:

1. Я чувствую себя глупо. 1. В обычном Python вы, вероятно, сделали бы [int(k >= 0.5) for k in p] .

2. На самом деле, поскольку OP все p равно перезаписывается, он мог бы также избежать затрат на вызов sigmoid и просто сделать p = dot(theta,X) >= 0.0;

Ответ №2:

Вы можете просто сказать p = (p>=0.5) . Логические операторы работают с массивами и возвращают логические массивы (которые состоят из логических значений).

Ответ №3:

Вы можете работать со всем массивом сразу:

 p(p >= 0.5) = 1;
p(p < 0.5) = 0;
  

Для чего это стоит, вы можете сделать то же самое в Numpy, если p это массив Numpy:

 >>> p[p >= 0.5] = 1
>>> p[p < 0.5] = 0
  

Ответ №4:

Просто для разнообразия. Вы также можете сделать:

 p = floor(p   0.5);
  

который также распространяется на другие пороговые значения в диапазоне [0,1].