В виде SciPy с открытым исходным кодом, у него очень активное и яркое сообщество разработчиков, благодаря которому существует огромное количество модулей для огромного количества научных приложений и вычислений, доступных с SciPy. Вот некоторые из сложных математических операций, которые можно выполнять с помощью SciPy:
- Интерполяция
- Интеграция
- Оптимизация
- Обработка изображений
- Статистика
- Расчеты специальных функций и т. Д.
SciPy можно сравнить с большинством командных и стандартных библиотек, таких как библиотека GSL для C ++ и Matlab. Поскольку SciPy построен поверх пакета NumPy, эти два пакета также могут быть полностью интегрированы. Если вы можете придумать математическую операцию, которую необходимо выполнить, убедитесь, что вы проверили библиотеку SciPy, прежде чем реализовывать этот модуль самостоятельно, потому что в большинстве случаев SciPy уже полностью реализовал все операции для вас.
Установить библиотеку SciPy
Давайте установим библиотеку SciPy, прежде чем мы перейдем к реальным примерам и концепциям. Есть два способа установить этот пакет. Первый включает использование диспетчера пакетов Python, pip:
pip install scipyВторой способ относится к Anaconda, мы можем установить пакет как:
conda install -c anaconda scipyПосле установки библиотеки мы можем импортировать ее как:
импортный scipyНаконец, поскольку мы также будем использовать NumPy (рекомендуется, чтобы для всех операций NumPy мы использовали NumPy напрямую, а не через пакет SciPy):
import numpyВозможно, что в некоторых случаях нам также захочется отобразить наши результаты, для чего мы будем использовать библиотеку Matplotlib. Выполните следующий импорт для этой библиотеки:
импортировать matplotlibЯ буду использовать менеджер Anaconda для всех примеров в этом уроке. Я запущу Jupyter Notebook для того же:
Теперь, когда мы готовы со всеми операторами импорта для написания некоторого кода, давайте начнем погружаться в пакет SciPy с некоторыми практическими примерами.
Работа с полиномиальными уравнениями
Мы начнем с рассмотрения простых полиномиальных уравнений. Есть два способа интегрировать полиномиальные функции в нашу программу. Мы можем использовать poly1d класс, который использует коэффициенты или корни многочлена для инициализации многочлена. Давайте посмотрим на пример:
из numpy import poly1dfirst_polynomial = poly1d ([3, 4, 7])
печать (первое_полином)
Когда мы запустим этот пример, мы увидим следующий результат:
Ясно, что полиномиальное представление уравнения печатается как результат, так что результат довольно легко понять. Мы также можем выполнять различные операции с этим многочленом, например возводить его в квадрат, находить его производную или даже решать его для значения x. Попробуем сделать все это в следующем примере:
print ("Полиномиальный квадрат: \ n")print (первый_полином * первый_полином)
print ("Производная многочлена: \ n")
print (first_polynomial.производная ())
print ("Решение многочлена: \ n")
печать (первый_полином (3))
Когда мы запустим этот пример, мы увидим следующий результат:
Когда я подумал, что это все, что мы можем сделать с помощью SciPy, я вспомнил, что мы также можем интегрировать полином. Давайте запустим последний пример с полиномами:
print ("Интегрирование полинома: \ n")print (first_polynomial.интег (1))
Передаваемое целое число сообщает пакету, сколько раз нужно интегрировать полином:
Мы можем просто передать другое целое число, которое сообщает пакету, сколько раз нужно интегрировать этот многочлен.
Решение линейных уравнений
С помощью SciPy можно даже решать линейные уравнения и находить их корни, если они существуют. Для решения линейных уравнений мы представляем набор уравнений в виде массивов NumPy, а их решение - в виде отдельных массивов NumPy. Давайте визуализируем это на примере, где мы делаем то же самое и используем линалг пакет, чтобы найти корни уравнений, вот уравнения, которые мы будем решать:
1x + 5y = 63х + 7у = 9
Решим приведенные выше уравнения:
от scipy import linalgуравнение = np.массив ([[1, 5], [3, 7]])
решение = np.массив ([[6], [9]])
корни = linalg.решить (уравнение, решение)
print ("Нашел корни:")
печать (корни)
print ("\ n Точечное произведение должно быть равно нулю, если решения верны:")
печать (уравнение.точка (корни) - решение)
Когда мы запустим вышеуказанную программу, мы увидим, что уравнение скалярного произведения дает нулевой результат, что означает, что корни, найденные программой, были правильными:
Преобразования Фурье с помощью SciPy
Преобразования Фурье помогают нам выразить функцию как отдельные компоненты, составляющие эту функцию, и направляют нас в отношении того, как мы можем рекомбинировать эти компоненты, чтобы вернуть исходную функцию.
Давайте посмотрим на простой пример преобразования Фурье, где мы строим сумму двух косинусов с помощью библиотеки Matplotlib:
из scipy.fftpack import fft# Количество точек выборки
N = 500
# образец интервала
Т = 1.0/800.0
х = np.linspace (0.0, Н * Т, Н)
y = np.cos (50.0 * 2.0 * нп.пи * х) + 0.5 * нп.cos (80.0 * 2.0 * нп.пи * х)
yf = fft (y)
xf = np.linspace (0.0, 1.0 / (2.0 * T), N // 2)
# matplotlib для построения графиков
импортировать matplotlib.pyplot как plt
plt.сюжет (xf, 2.0 / N * np.abs (yf [0: N // 2]))
plt.title ('Информация')
plt.ylabel ('ось Y')
plt.xlabel ('ось X')
plt.сетка()
plt.показывать()
Здесь мы начали с построения образца пространства и уравнения косинуса, которое затем преобразовали и построили. Вот результат работы вышеуказанной программы:
Это один из хороших примеров, когда мы видим, как SciPy используется в сложном математическом уравнении, чтобы легко визуализировать вещи.
Векторы и матрица с SciPy
Теперь, когда мы знаем многое, на что способен SciPy, мы можем быть уверены, что SciPy также может работать с векторами и матрицами. Матрицы являются важной частью линейной алгебры, поскольку матрицы - это то, что мы также используем для представления векторных отображений.
Так же, как мы рассматривали решение линейных уравнений с помощью SciPy, мы можем представить векторы с помощью нп.множество() функции. Начнем с построения матрицы:
my_matrix = np.матрица (np.случайный.случайный ((3, 3)))печать (my_matrix)
Вот результат приведенного выше фрагмента:
Когда мы говорим о матрицах, мы всегда говорим о собственных значениях и собственных векторах. Проще говоря, собственные векторы - это векторы, которые при умножении на матрицу не меняют своего направления, в отличие от большинства векторов. Это означает, что даже когда вы умножаете собственные векторы на матрицу, существует значение (или собственное значение), которое является одним из факторов умножения. Это означает:
Ах = λx.В приведенном выше уравнении A - матрица, λ - собственное значение, а x - вектор. Напишем простой фрагмент кода, чтобы найти собственные значения для данного вектора:
la, vector = linalg.eig (my_matrix)печать (вектор [:, 0])
печать (вектор [:, 1])
печать (линалг.eigval (my_matrix))
Когда мы запустим этот пример, мы увидим следующий результат:
Вычисление определителя матрицы
Следующая операция, которую мы выполним с SciPy, - это вычисление определителя 2-мерной матрицы. Мы будем повторно использовать матрицу, которую мы использовали в последнем фрагменте кода, здесь:
линалг.det (my_matrix)Когда мы запустим этот пример, мы увидим следующий результат:
Заключение
В этом уроке мы рассмотрели множество хороших примеров, в которых SciPy может помочь нам, выполняя сложные математические вычисления за нас с помощью простого в использовании API и пакетов.