#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].