Возведение в степень в 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 не так читаемы. Но что Я хотел бы спросить, если:



" есть ли какая-либо вычислительная причина предпочесть первые две альтернативы третьей?"



Спасибо за чтение!

722   2  

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

    Ничего не найдено.