Модуль math в python
Содержание:
- Тригонометрические функции
- Математические функции и числовые методы
- Отрицательные значения и ноль
- Что такое Numpy Power?
- Комплексные числа (complex)
- Функции представления чисел
- Целые числа и числа с плавающей запятой
- 7.3. Статистика
- Кубический корень
- Определение модуля. 3 типа модулей в Python
- Комплексные числа в Python (complex)
- Способы извлечения корня
- 3 ответа
Тригонометрические функции
В Python есть следующие тригонометрические функции.
Функция | Значение |
---|---|
принимает радиан и возвращает его синус | |
принимает радиан и возвращает его косинус | |
принимает радиан и возвращает его тангенс | |
принимает один параметр и возвращает арксинус (обратный синус) | |
принимает один параметр и возвращает арккосинус (обратный косинус) | |
принимает один параметр и возвращает арктангенс (обратный тангенс) | |
принимает один параметр и возвращает гиперболический синус | |
принимает один параметр и возвращает гиперболический косинус | |
принимает один параметр и возвращает гиперболический тангенс | |
принимает один параметр и возвращает обратный гиперболический синус | |
принимает один параметр и возвращает обратный гиперболический косинус | |
принимает один параметр и возвращает обратный гиперболический тангенс |
Пример:
Вывод:
Математические функции и числовые методы
Python имеет несколько встроенных функций, которые можно использовать для работы с числами. В этом разделе вы узнаете о трех наиболее распространенных:
- , для округления чисел до определённого количества десятичных знаков
- , для получения абсолютного значения числа
- , для возведения числа в степень
Вы также узнаете о методе, который можно использовать с числами с плавающей запятой, чтобы проверить, имеют ли они целочисленное значение.
Круглые числа с round()
Вы можете использовать для округления числа до ближайшего целого:
Вы можете округлить число до заданного количества десятичных знаков, передав второй аргумент функции :
Число 3,14159 округляется до трех десятичных знаков, чтобы получить 3,142, а число 2,71828 округляется до двух десятичных знаков, чтобы получить 2,72.
Второй аргумент должен быть целым числом. Если это не так, Python вызывает :
Иногда не дает правильного ответа:
2.675 – это ничья, потому что она находится ровно посередине между числами 2.67 и 2.68. Поскольку Python округляет до ближайшего четного числа, вы ожидаете, что round (2,675, 2) вернет 2,68, но вместо этого он вернет 2,67. Эта ошибка является результатом ошибки представления с плавающей запятой, а не ошибки в .
Работа с числами с плавающей запятой может вызывать разочарование, но это разочарование не характерно для Python. Все языки, реализующие стандарт IEEE с плавающей запятой, имеют одинаковые проблемы, включая C / C ++, Java и JavaScript.
Однако в большинстве случаев небольшие ошибки, возникающие при работе с числами с плавающей запятой, незначительны, а результаты очень полезны.
Найдите абсолютное значение с помощью abs()
Абсолютное значение числа равно , если положительно, и , если отрицательно. Например, абсолютное значение 3 равно 3, а абсолютное значение -5 равно 5.
Чтобы получить абсолютное значение числа в Python, вы используйте :
всегда возвращает положительное число того же типа, что и его аргумент. То есть абсолютное значение целого числа всегда является положительным целым числом, а абсолютное значение числа с плавающей запятой всегда является положительным числом с плавающей запятой.
Возвести в степень с помощью pow()
Ранее вы узнали, как возвести число в степень с помощью оператора . Вы также можете использовать для достижения того же результата.
принимает два аргумента. Первый аргумент – это основание или число, которое нужно возвести в степень, а второй аргумент – это показатель степени или степень, до которой число должно быть возведено в степень.
Например, в следующем примере функция возводит 2 в степень 3:
Как и в случае , показатель степени в может быть отрицательным:
Итак, в чем разница между и ?
Функция принимает необязательный третий аргумент, который вычисляет первое число, возведенное в степень второго числа, а затем берет модуль по отношению к третьему числу. Другими словами, эквивалентно .
Вот пример, в котором x = 2, y = 3 и z = 2:
Сначала 2 возводится в степень 3, чтобы получить 8. Затем вычисляется 8 % 2, что равно 0, потому что 2 делит 8 без остатка.
Проверка, является ли float целым числом
Возможно, вы знакомы со строковыми методами, такими как , и Целые числа и числа с плавающей запятой также имеют методы.
Числовые методы используются не очень часто, но есть один, который может быть полезен. У чисел с плавающей запятой есть метод , который возвращает True, если число является целым, то есть не имеет дробной части, а в противном случае возвращает False:
Одно из применений – это проверка пользовательского ввода. Например, если вы пишете приложение для онлайн-заказа пиццерии, вам нужно проверить, является ли количество пиццы, вводимых клиентом, целым числом.
Функции , и являются встроенными, то есть вам не нужно ничего импортировать, чтобы использовать их. Но эти три функции лишь мельком охватывают все функции, доступные для работы с числами в Python.
Отрицательные значения и ноль
Функция sqrt в «Питоне» — вещь полезная и знать ее нужно, однако она не принимает отрицательного числа — лишь положительные (целые и вещественные), а также ноль.
Такая ограниченная возможность использования не соответствует математическим канонам, ведь в реальной жизни специалисты по математике без проблем извлекают √ и из отрицательных значений. Да, результат будет комплексным и пригодится лишь для решения довольно узкого спектра задач, типа расчетов волновых явлений в физике либо вычислений в энергетической сфере.
Учитывайте вышесказанное, если пытаетесь извлекать корни в Python посредством этой функции. Передав отрицательное значение, вы получите error:
А вот если говорить про ноль, то ошибки не будет, так как код отработает корректно. Однако результат тут очевиден, поэтому практическая ценность данной возможности весьма условна:
Хотите знать о «Питоне» намного больше? Добро пожаловать на специализированный курс в «Отус»!
По материалам:
Что такое Numpy Power?
Степенная функция Numpy является частью арифметических функций в Numpy. Numpy power () – это функция, доступная в numpy, в которой первый элемент массива является базой, которая поднимается до элемента power (второй массив) и, наконец, возвращает значение. На языке непрофессионалов numpy power вычисляет возведение значения в степень в Python.
Я предполагаю, что при написании этого поста вы уже знаете о возведении в степень. Если нет, позвольте мне быстро объяснить вам.
Согласно Википедии: href=”https://en.wikipedia.org/wiki/Exponentiation#:~:text=Exponentiation%20is%20a%20mathematical%20operation,to%20the%20power%20of%20n%22.”>Exponentiation – это математическая операция, записанная как bn, включающая два числа, основание b и показатель степени или степень n, и произносится как “b возведенный в степень n”. Когда n является положительным целым числом, возведение в степень соответствует повторному умножению основания: то есть bn является произведением умножения n оснований. href=”https://en.wikipedia.org/wiki/Exponentiation#:~:text=Exponentiation%20is%20a%20mathematical%20operation,to%20the%20power%20of%20n%22.”>Exponentiation – это математическая операция, записанная как bn, включающая два числа, основание b и показатель степени или степень n, и произносится как “b возведенный в степень n”. Когда n является положительным целым числом, возведение в степень соответствует повторному умножению основания: то есть bn является произведением умножения n оснований.
Теперь я думаю, что вы получили представление о возведении в степень. Итак, давайте перейдем к нашей основной теме и перейдем непосредственно к синтаксису numpy.power.
Комплексные числа (complex)
В Python встроены также и комплексные числа:
Также для работы с комплексными числами используется также модуль cmath.
В программировании мы всегда взаимодействуем с данными, которые не являются какой-то абстрактной субстанцией. Все данные разделяются по определенному типу. На предыдущих уроках мы узнали, про строки, списки, словари и о логическом типе данных. Сегодня, поговорим о самом базовом типе данных в Python — числах.
Почему нельзя свалить все данные в одну общую кучу и не заморачиваться с каждым типом по отдельности? Допустим, мы присвоили переменной a цифру 5: a = 5. А теперь представьте, что никакого разделения по типу данных нет. Так что находится в переменной: число или строка? Если 10 — это число, то с ним можно произвести математические действия. А если это строка, то мы имеем дело с текстом и тогда Python задействует совсем другие методы.
# объединение строк (конкатенация) d = ’10’ f = ‘негритят’ d + ‘ ‘ + f ’10 негритят’
Ключевой момент: У каждого типа данных свои методы.
Цифра 100 написанная без кавычек, относится к числовому типу данных. А цифра ‘100’ в кавычках — к строковому типу. С помощью синтаксиса, мы сообщаем Python, какой у нас тип данных. Числа в Python делятся на два вида: целое число и вещественное.
Функции представления чисел
ceil() и floor() — целая часть числа
и — функции общего назначения. Функция ceil округляет число до ближайшего целого в большую сторону. Функция floor убирает цифры десятичных знаков. Обе принимают десятичное число в качестве аргумента и возвращают целое число.
Пример:
Вывод:
Функция fabs() — абсолютное значение
Функция используется для вычисления абсолютного значения числа. Если число содержит любой отрицательный знак (), то функция убирает его и возвращает положительное дробное число.
Пример:
Вывод:
factorial() — функция факториала
Эта функция принимает положительное целое число и выводит его факториал.
Пример:
Вывод:
Примечание: при попытке использовать отрицательное число, возвращается ошибка значения ().
Пример:
Вывод:
Функция fmod() — остаток от деления
Функция возвращает . Разница в том, что выражение работает только с целыми числами, а эту функцию можно использовать и для чисел с плавающей точкой.
Пример:
Вывод:
Функция frexp()
Эта функция возвращает мантиссу и показатель степени в виде пары () любого числа , решая следующее уравнение.
Пример:
Вывод:
Функция fsum() — точная сумма float
Вычисляет точную сумму значений с плавающей точкой в итерируемом объекте и сумму списка или диапазона данных.
Пример:
Вывод:
Целые числа и числа с плавающей запятой
Python имеет три встроенных числовых типа данных: целые числа, числа с плавающей запятой и комплексные числа. В этом разделе вы узнаете о целых числах и числах с плавающей запятой, которые являются двумя наиболее часто используемыми типами чисел. Вы узнаете о комплексных числах в следующем разделе.
Целые числа
Целое число – это целое число без десятичных знаков. Например, 1 – целое число, а 1.0 – нет. Имя для целочисленного типа данных – , которое вы можете увидеть с помощью :
Вы можете создать целое число, набрав желаемое число. Например, следующее присваивает переменной целое число 25:
Когда вы создаете такое целое число, значение 25 называется целочисленным литералом, потому что целое число буквально вводится в код.
Возможно, вы уже знакомы с тем, как преобразовать строку, содержащую целое число, в число с помощью . Например, следующее преобразует строку «25» в целое число 25:
не является целочисленным литералом, потому что целое значение создается из строки.
Когда вы пишете большие числа от руки, вы обычно группируете цифры в группы по три, разделенные запятой или десятичной точкой. Число 1000000 читать намного легче, чем число 1000000.
В Python нельзя использовать запятые для группировки цифр в целочисленных литералах, но можно использовать символы подчеркивания (_). Оба следующих способа являются допустимыми способами представления числа один миллион как целочисленного литерала:
Нет предела тому, насколько большим может быть целое число, что может быть удивительно, учитывая, что компьютеры имеют конечный объем памяти. Попробуйте ввести наибольшее число, которое вы можете придумать, в интерактивном окне IDLE. Python справится с этим без проблем!
Числа с плавающей запятой
Число с плавающей запятой(floating-point number) или сокращенно с плавающей запятой(float) – это число с десятичной запятой. 1.0 – это число с плавающей запятой, как и -2.75. Имя типа данных с плавающей запятой – float:
Как и целые числа, числа с плавающей запятой можно создавать из литералов с плавающей запятой(floating-point literals) или путем преобразования строки в число с плавающей запятой с помощью функции :
Есть три способа представить литерал с плавающей запятой. Каждое из следующих действий создает литерал с плавающей запятой со значением один миллион:
Первые два способа аналогичны двум методам создания целочисленных литералов. Третий подход использует нотацию E для создания литерала с плавающей запятой.
Чтобы написать литерал с плавающей запятой в нотации E, введите число, за которым следует буква e, а затем другое число. Python берет число слева от e и умножает его на 10, возведенное в степень числа после e. Итак, эквивалентно 1 × 10⁶.
Python также использует нотацию E для отображения больших чисел с плавающей запятой:
Число с плавающей запятой 200000000000000000.0 отображается как . Знак указывает, что показатель степени является положительным числом. Вы также можете использовать отрицательные числа в качестве показателя степени:
Литерал интерпретируется как в степени , что составляет 1/10000 или 0,0001.
В отличие от целых чисел, числа с плавающей запятой имеют максимальный размер. Максимальное число с плавающей запятой зависит от вашей системы, но что-то вроде должно выходить за рамки возможностей большинства машин. составляет 2 × 10⁴⁰⁰, что намного больше, чем общее количество атомов во Вселенной!
Когда вы достигнете максимального числа с плавающей запятой, Python вернет специальное значение с плавающей запятой, :
означает бесконечность, и это просто означает, что число, которое вы пытались создать, превышает максимальное значение с плавающей запятой, разрешенное на вашем компьютере. Тип по-прежнему :
Python также использует , что означает отрицательную бесконечность и представляет собой отрицательное число с плавающей запятой, которое превышает минимальное число с плавающей запятой, разрешенное на вашем компьютере:
Вы, вероятно, не будете часто сталкиваться с и как программист, если только вы не будете регулярно работать с очень большими числами.
7.3. Статистика
Над данными в массивах можно производить определенные вычисления, однако, не менее часто требуется эти данные как-то анализировать. Зачастую, в этом случае мы обращаемся к статистике, некоторые функции которой тоже имеются в NumPy. Данные функции могут применять как ко всем элементам массива, так и к элементам, расположенным вдоль определенной оси.
Элементарные статистические функции:
Средние значения элементов массива и их отклонения:
Корреляционные коэфициенты и ковариационные матрицы величин:
Так же NumPy предоставляет функции для вычисления гистограмм наборов данных различной размерности и некоторые другие статистичские функции.
Кубический корень
Само название функции намекает нам на то, что она не подходит для извлечения корня степени отличной от двойки. Поэтому для извлечения кубических корней, сначала необходимо вспомнить связь между степенями и корнями, которую продемонстрируем на корне квадратном:
Вышеуказанное соотношение несложно доказать и для других степеней вида .
В случае с квадратным или кубическим корнем эти операции действительно эквивалентны, но, вообще говоря, в математике извлечение корня и возведение в дробную степень имеют существенные отличия при рациональных степенях вида m/n, где m != 1. Формально, в дробно-рациональную степень можно возводить только положительные вещественные числа. В противном случае возникают проблемы:
Таким образом, извлечь кубический корень в Python можно следующим образом:
Или же:
Определение модуля. 3 типа модулей в Python
Для начала разберемся в том, что такое модуль в Python. Под этим словом подразумеваются специальные файлы, в которых содержатся переменные классов, функции и другие компоненты работы программы, которые могут использоваться в самых разных приложениях. Они, точно так же, как и функции, лишают необходимости изобретать велосипед или писать огромное количество одних и тех же строк в разных программах.
В это же время функции объявляются в программе, а модуль может использоваться в самых разных приложениях. Достаточно объявить их один раз, и далее ее можно использовать в нескольких программах, написанных разными людьми. Более того, они могут друг друга не знать, а просто установить модуль для языка программирования и использовать их на разных уголках света.
Все модули в Python разделяются на три вида:
- Написанные на самом Python. Имеют расширение .py.
- Написанные на C и загружаемые динамически. Такие модули могут иметь разные расширения, начиная привычным .dll и заканчивая менее распространенными .pyd, .so, .sl.
- Модули, написанные на C, но имеющие связь с Python.
Для того, чтобы получить список последних, необходимо написать следующие строки кода.
import sys
print(sys.builtin_module_names)
Комплексные числа в Python (complex)
Также в Python встроены комплексные числа:
>>> >>> x = complex(1, 2) >>> print(x) (1+2j) >>> y = complex(3, 4) >>> print(y) (3+4j) >>> z = x + y >>> print(x) (1+2j) >>> print(z) (4+6j) >>> z = x * y >>> print(z) (-5+10j) >>> z = x y >>> print(z) (0.44+0.08j) >>> print(x.conjugate()) # Сопряжённое число (1-2j) >>> print(x.imag) # Мнимая часть 2.0 >>> print(x.real) # Действительная часть 1.0 >>> print(x > y) # Числа нельзя сравнить Traceback (most recent call last): File "", line 1, in TypeError unorderable types complex() > complex() >>> print(x == y) # Однако можно проверить их на равенство False >>> abs(3 + 4j) # Модуль 5.0 >>> pow(3 + 4j, 2) # Возведение в степень, получение значения степени (-7+24j)
Кроме того, для работы с complex может применяться модуль cmath.
На этом пока что всё. Следите за новостями и не забывайте оставлять свои комментарии!
Способы извлечения корня
В языке программирования Python 3 существует три способа извлечения корней:
- Использование функции sqrt из стандартной математической библиотеки math.
- Операция возведения в степень **
- Применение функции pow(x, n)
Чтобы воспользоваться первым способом, необходимо вначале импортировать sqrt из модуля math. Это делается с помощью ключевого слова import: . При помощи этой функции можно извлекать только квадратный корень из числа. Приведем пример:
from math import sqrt x = sqrt(4) print(x) 2.0
Если же нам нужно вычислить в Python корень квадратный из суммы квадратов, то можно воспользоваться функцией hypot из модуля math. Берется сумма квадратов аргументов функции, из нее получается корень. Аргументов у функции два.
from math import hypot x = hypot(4,3) print(x) 5.0
Еще одним, чуть более универсальным методом, будет использование возведения в степень. Известно, что для того, чтобы взять корень n из числа, необходимо возвести его в степень 1/n. Соответственно, извлечение квадратного корня из числа 4 будет выглядеть так:
n = 2 x = 4**(1./n) print(x) 2.0
Обратите внимание, что в Python 2 необходимо ставить точку после единицы, иначе произойдет целочисленное деление, и 1/n == 0, а не нужной нам дроби. В Python 3 можно не ставить точку.. Последний метод использует функцию pow(value, n)
Эта функция в качестве аргумента value возьмет число, которое необходимо возвести в степень, а второй аргумент будет отвечать за степень числа. Как и в предыдущем методе, необходимо использовать дробь, для того, чтобы получить корень числа
Последний метод использует функцию pow(value, n). Эта функция в качестве аргумента value возьмет число, которое необходимо возвести в степень, а второй аргумент будет отвечать за степень числа. Как и в предыдущем методе, необходимо использовать дробь, для того, чтобы получить корень числа.
x = pow(4, 0.5) print(x) 2.0
Какой метод быстрее?
Для того, чтобы определить какой же метод предпочтительнее использовать, напишем программу. Замерять время выполнения будем с помощью метода monotonic библиотеки time.
from time import monotonic from math import sqrt iterations = 1000000 start = monotonic() for a in range(iterations): x = sqrt(4) print("sqrt time: {:>.3f}".format(monotonic() - start) + " seconds") start = monotonic() for a in range(iterations): x = 4 ** 0.5 print("** time: {:>.3f}".format(monotonic() - start) + " seconds") start = monotonic() for a in range(iterations): x = pow(4, 0.5) print("pow time: {:>.3f}".format(monotonic() - start) + " seconds") sqrt time: 0.266 seconds ** time: 0.109 seconds pow time: 0.453 seconds
Как видно, самое быстрое решение — использовать **. На втором месте метод sqrt, а pow — самый медленный. Правда, метод sqrt наиболее нагляден при вычислении в Python квадратных корней.
Таким образом, если критична скорость, то используем **. Если скорость не критична, а важна читаемость кода, то следует использовать sqrt.
3 ответа
Лучший ответ
Вы специально избегаете библиотек?
Если нет, вы могли бы использовать для своей власти (понял? Сила ..
не важно):. EDIT1: или альтернативно используйте:
EDIT1: или альтернативно используйте:
Стоит отметить, что для любого они будут выбрасывать , так как он математически не определен (и, следовательно, не должен представлять логической проблемы).
EDIT2: Но лучшим подходом будет использование битовых манипуляций:
Объяснение: каждая степень 2 имеет ровно 1 бит, установленный в 1 (бит в индексе base-2 журнала этого числа — 8 равен 1000 при 2 ^ 3 = 8, поэтому бит в индексе 3 установлен). Таким образом, вычитая из него 1, этот бит переходит на 0, а все предыдущие биты переворачиваются на 1. Это делает эти 2 числа обратными друг другу, поэтому при И-их мы получим 0 в качестве результата. Итак, в заключение, всякий раз, когда мы вычитаем единицу из числа и И с результатом, и это становится 0, это число является степенью 2.
РЕДАКТИРОВАТЬ1: время
Согласно комментарию @FilipHaglund, я вернулся к , чтобы попытаться собрать информацию об эффективности. Я обнаружил, что метод с заданной базой фактически вычисляет , что, очевидно, медленнее.
Чем я видел, есть еще один метод — — который берет только число и, очевидно, вычисляет его логарифм по основанию 2, который звучит так, как будто он должен быть быстрее.
В конце я хотел посмотреть, как они соотносятся с бинарным подходом. Итак, результаты:
Код, который я использовал для этих мер, приведен ниже. Что я в основном сделал, так это проверил все числа от 1 до 1М, являются ли они степенью 2 в каждом методе, 10 раз и взял среднее значение. Конечно, это не научно, но дает представление …
EDIT2: также следует отметить, что для действительно больших чисел (например, ) первое не является точным и фактически дает ложноотрицательные результаты.
Надеюсь, вы найдете мое небольшое исследование полезным 🙂
9
Tomerikoo
30 Ноя 2019 в 09:25
Используйте * 2 вместо битовых сдвигов. Битовые сдвиги ограничены размером int, но умножение — нет. Умножение или сложение гораздо более читабельно.
1
Filip Haglund
14 Июл 2019 в 08:47
Обратитесь к превосходному и подробному ответу на вопрос «Как проверить, является ли число степенью 2» — для C #. Эквивалентная реализация Python, также использующая «побитовый оператор» , это:
Python имеет целые числа произвольной точности, это работает для любого целого числа , если оно помещается в память.
Кратко резюмируя приведенный выше ответ: первый член перед логическим оператором просто проверяет, равен ли 0, и, следовательно, не имеет степень 2. Второе слагаемое проверяет, является ли оно степенью 2, проверяя, чтобы все биты после этой побитовой операции были равны 0. Битовая операция предназначена только для для степеней из 2 — с одним исключением: if (и, следовательно, все его биты) были 0 для начала.
Чтобы добавить к этому: оценка двух терминов, было бы более эффективно изменить их порядок, если в конкретном случае менее вероятно, что данный будет 0, чем степень 2.
3
anon
15 Июл 2019 в 07:52