Быстрее сохранить разделение в переменной и использовать переменную или дважды пересчитать?

Представьте, что у вас есть следующие типы данных (числа заполняются как аргументы):

  • Целое ‹- Вес
  • Float ‹- Высота

Цель состоит в том, чтобы вычислить индекс b ody- m ass i, который будет иметь вид 23,13 и т. Д.

bodyMassIndex = вес / рост ^ 2

Я хочу работать с bmi немного больше, например, преобразовать bmi (float) в int или разделить bmi по модулю и т. Д.

Быстрее с точки зрения скорости вычислений сначала сохранить bmi, а затем использовать переменную в других вычислениях (вариант a) или снова выполнить расчет формулы в другом вычислении (вариант b)?


Вариант А:

**bmi** = weight / height^2

OtherCalculation = **bmi** % 10

...

Вариант Б:

bmi = weight / (height^2)

OtherCalculation = (weight / height^2) % 10

OtherOtherCalculation =  (weight / height^2) * 100

...

Изменить: Я пишу на Python


person Community    schedule 06.01.2019    source источник
comment
На каком языке ты работаешь?   -  person Richard    schedule 06.01.2019
comment
Я работаю с Python   -  person    schedule 06.01.2019


Ответы (1)


Я решил протестировать ваши примеры с помощью модуля python timeit. Я выбрал произвольную высоту и ширину, поскольку эти значения не повлияют на результаты сравнения. Используя приведенный ниже сценарий, я обнаружил, что (неудивительно) сохранение значений в промежуточную переменную как минимум в два раза быстрее как для Python 3.x, так и для Python 2.x.

from timeit import timeit

runs = 1000000

option_a = "(w / h ** 2)"
option_b = "bmi"

setup_a = "w = 4.1; h = 7.6"
setup_b = "{}; bmi = {}".format(setup_a, option_a)

test_1 = "v = {} % 10"
test_2 = "v = {} * 100"


print(timeit(test_1.format(option_a), setup=setup_a, number=runs))
print(timeit(test_1.format(option_b), setup=setup_b, number=runs))

print(timeit(test_2.format(option_a), setup=setup_a, number=runs))
print(timeit(test_2.format(option_b), setup=setup_b, number=runs))

Результаты в Python 3

0.2930161730000691
0.082850623000013
0.17264470200007054
0.06962196800031961

И в Python 2

0.126236915588
0.0508558750153
0.113535165787
0.0394539833069
person Dillon Davis    schedule 06.01.2019