Возведение в степень в Python-я должен предпочесть оператор * * вместо математики.Пау и математика.sqrt? [дубликат]
этот вопрос уже есть ответ здесь:
в моей области очень часто квадрат некоторых чисел, управлять ими вместе, и взять квадратный корень из результата. Это делается в теореме Пифагора и вычислении RMS, для образец.
в numpy, я сделал следующее:
result = numpy.sqrt(numpy.sum(numpy.pow(some_vector, 2)))
и в чистом Python что-то вроде этого можно было бы ожидать:
result = math.sqrt(math.pow(A, 2) + math.pow(B,2)) # example with two dimensions.
тем не менее, я использую эту чистую форму python, так как я нахожу ее гораздо более компактной, независимой от импорта и, по-видимому, эквивалентной:
result = (A**2 + B**2)**0.5 # two dimensions
result = (A**2 + B**2 + C**2 + D**2)**0.5
Я слышал, что некоторые люди утверждают, что ** оператор-это своего рода Хак, и это возведение в квадрат числа путем его возведения в степень 0.5 не так читаемы. Но что Я хотел бы спросить, если:
" есть ли какая-либо вычислительная причина предпочесть первые две альтернативы третьей?"
Спасибо за чтение!
2 ответов:
math.sqrtявляется c реализацией квадратного корня и поэтому отличается от использования**оператор, который реализует встроенный в Python
даже в базовом Python вы можете делать вычисления в общей форме
result = sum(x**2 for x in some_vector) ** 0.5
x ** 2это, конечно, не хак и вычисление выполняется то же самое (я проверил с исходным кодом cpython). Я на самом деле нахожу его более читаемым (и читаемость считается).вместо
x ** 0.5чтобы взять квадратный корень не делает точно такие же вычисления, какmath.sqrtпоскольку первый (вероятно) вычисляется с использованием логарифмов, а последний (вероятно) - с использованием определенного числа инструкция математического процессора.Я часто использую
x ** 0.5просто потому, что я не хочу, чтобы добавитьmathтолько для этого. Однако я ожидаю, что конкретная инструкция для квадратного корня будет работать лучше (точнее), чем многоступенчатая операция с логарифмами.
Comments