#python #vectorization
Вопрос:
Мне дают два числа x
и y
на Python, и меня спрашивают, y
представляет ли это уменьшение на 10% от x
.
Каков наилучший способ сделать это без ан if-statement
? Я хочу векторизовать эту операцию, поэтому было бы хорошо иметь форму без ветвей.
Подробная проверка будет:
def check(x,y): if x lt; 0: return y lt; x*1.1 else: return y lt; x*0.9
Я подумал
def check(x,y): return y lt; x * (1.1 if x lt; 0 else 0.9)
но это всего лишь встроенный if-statement
.
Комментарии:
1. Простой Python не поддерживает векторные операции. Просто используйте
if
утверждение…2.
return x*0.9 lt; y lt; x*1.1
3. пробовать
return (y - x) / x lt;= .10
4. @dawg Если цель состоит в том, чтобы избежать ветвления на аппаратном уровне, то операторы сравнения также недопустимы.
5. Я работаю над множеством массивов numpy большого размера, поэтому я хочу реализовать это с помощью операций на уровне массива. Ответ @Plonetheus хорош — я могу адаптировать его к операциям numpy. ie.
(x-y).div(x.abs()) gt; 0.1
Ответ №1:
Если я правильно понимаю вопрос, я думаю, что это должно сработать:
def ten_percent_decrease(x: int, y: int): """ check if y is 10% less than x """ return (x - y) / abs(x) gt; 0.1
Примечание: код прерывается, если вы даете 0 для x. Я не уверен, каким вы хотите видеть ожидаемый результат в этом случае, но вы можете настроить его соответствующим образом.
Комментарии:
1. Спасибо. Это решило мою проблему. Согласно моему комментарию выше, я расширил его до массивов numpy.