Как вы проверяете, снизилось ли что-то на 10% без заявления if?

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