Перейти к содержимому

Руководство по SciPy

Добро пожаловать в наше подробное руководство по использованию SciPy для программирования на Python! SciPy — это библиотека с открытым исходным кодом для Python, предназначенная для научных и технических вычислений. Она широко используется учеными, инженерами, математиками и аналитиками данных для выполнения сложных вычислений, анализа данных и визуализации. В этом руководстве мы рассмотрим возможности SciPy и научимся эффективно применять её для различных научных и технических задач.

Начало работы с SciPy

Прежде чем углубляться в детали работы с SciPy, давайте начнем с её установки. SciPy можно установить с помощью pip — менеджера пакетов для Python. Просто выполните следующую команду в терминале:


console
pip install scipy

После установки SciPy мы можем импортировать её в наш Python-скрипт с помощью следующей команды:

импорт scipy в Python-проекте

python
import scipy

Числовые операции с SciPy

Одной из ключевых особенностей SciPy является возможность выполнения числовых операций над массивами и матрицами. NumPy — это отдельная фундаментальная библиотека для работы с массивами, на которую опирается SciPy. Вместе они предоставляют мощные инструменты для работы с массивами и матрицами в Python. Давайте рассмотрим некоторые из наиболее часто используемых функций SciPy для числовых операций:

Линейная алгебра

SciPy предоставляет обширный набор функций для выполнения операций линейной алгебры над матрицами. С помощью SciPy можно выполнять такие операции, как умножение матриц, обращение матриц, вычисление собственных значений и собственных векторов, а также сингулярное разложение. Вот несколько примеров:

Операции линейной алгебры с использованием numpy и scipy в Python

python
import numpy as np
from scipy import linalg

# Create a 2x2 matrix
a = np.array([[1, 2], [3, 4]])

# Calculate the determinant of the matrix
det = linalg.det(a)
print(det)  # Output: -2.0

# Calculate the inverse of the matrix
inv = linalg.inv(a)
print(inv)  # Output: [[-2.   1. ], [ 1.5 -0.5]]

# Calculate the eigenvalues and eigenvectors of the matrix
eigenvalues, eigenvectors = linalg.eig(a)
print(eigenvalues)  # Output: [ 5.37228132 -0.37228132]
print(eigenvectors)  # Output: [[-0.82456484 -0.41597356]
#                 [ 0.56576746 -0.90983064]]

# Calculate the singular value decomposition of the matrix
u, s, v = linalg.svd(a)
print(u)  # Output: [[-0.82456484 -0.56576746]
#                 [ 0.56576746 -0.82456484]]
print(s)  # Output: [5.4649857  0.36596619]
print(v)  # Output: [[-0.57604844 -0.81741556]
#                 [-0.81741556  0.57604844]]

Интегрирование и дифференцирование

SciPy предоставляет функции для численного интегрирования и дифференцирования функций. Мы можем использовать эти функции для вычисления интегралов, производных и градиентов функций. Вот несколько примеров:

Численное интегрирование и дифференцирование функций в Python

python
import numpy as np
from scipy import integrate
from scipy.optimize import approx_fprime

# Define a function to integrate
def f(x):
    return x ** 2 + 2 * x + 1

# Calculate the definite integral of the function from 0 to 1
result, error = integrate.quad(f, 0, 1)
print(result)  # Output: 2.3333333333333335

# Define a function to differentiate
def g(x):
    return np.sin(x)

# Calculate the derivative of the function at x=0
result = approx_fprime([0.0], lambda x: g(x[0]), 1e-8)
print(result[0])  # Output: 1.0

Оптимизация

SciPy предлагает широкий спектр функций оптимизации для поиска минимума или максимума функции. Мы можем использовать эти функции для оптимизации нашего кода и повышения его эффективности. Вот несколько примеров:

Функции оптимизации scipy в Python

python
from scipy import optimize

# Define a function to minimize
def f(x):
    return x ** 2 + 2 * x + 1

# Find the minimum of the function
result = optimize.minimize(f, 0)
print(result)  # Output: OptimizeResult object containing success status, minimum value, and optimal parameters

# Define a function to maximize
def g(x):
    return -x ** 2 - 2 * x - 1

# Find the maximum of the function by minimizing the negative function
result = optimize.minimize_scalar(g)
print(result)  # Output: OptimizeResult object containing success status, maximum value, and optimal parameter

Визуализация с SciPy

Matplotlib — это отдельная широко используемая библиотека для визуализации данных, которая бесшовно работает с SciPy и NumPy. Давайте рассмотрим некоторые из наиболее часто используемых функций Matplotlib для визуализации.

Построение графиков

Мы можем использовать модуль matplotlib для создания различных типов графиков, таких как линейные графики, диаграммы рассеяния и столбчатые диаграммы. Вот несколько примеров:

Различные типы графиков с использованием matplotlib в Python

python
import numpy as np
import matplotlib.pyplot as plt

# Create a dataset
x = np.linspace(0, 10, 100)
y = np.sin(x)

# Create a line plot of the data
plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()  # Displays a line plot of the sine wave

# Create a scatter plot of the data
plt.scatter(x, y)
plt.title('Scatter Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()  # Displays a scatter plot of the sine wave data points

# Create a bar plot of the data
x = np.arange(3)
y = np.array([3, 7, 4])
plt.bar(x, y)
plt.xticks(x, ['A', 'B', 'C'])
plt.title('Bar Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()  # Displays a bar chart comparing values A, B, and C

Обработка изображений

SciPy предоставляет модуль ndimage, который позволяет выполнять различные операции с изображениями, такие как фильтрация, обнаружение границ и сегментация. Вот несколько примеров:

Использование модуля ndimage внутри SciPy в Python для выполнения различных операций с изображениями

python
from scipy import ndimage
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

# Load an image
image = mpimg.imread('image.jpg')

# Apply a Gaussian filter to the image
filtered_image = ndimage.gaussian_filter(image, sigma=2)

# Detect edges in the image
edge_image = ndimage.sobel(filtered_image)

# Perform segmentation on the image
threshold = np.mean(filtered_image)
segmented_image = filtered_image > threshold

# Show the original image
plt.subplot(2, 2, 1)
plt.imshow(image)
plt.title('Original Image')

# Show the filtered image
plt.subplot(2, 2, 2)
plt.imshow(filtered_image)
plt.title('Filtered Image')

# Show the edge image
plt.subplot(2, 2, 3)
plt.imshow(edge_image)
plt.title('Edge Image')

# Show the segmented image
plt.subplot(2, 2, 4)
plt.imshow(segmented_image)
plt.title('Segmented Image')

plt.show()  # Displays a 2x2 grid of the original, filtered, edge-detected, and segmented images

Заключение

SciPy — это необходимая библиотека для научных и технических вычислений в Python. Она предоставляет широкий спектр функций для числовых операций, оптимизации и визуализации. В этом руководстве мы рассмотрели некоторые из наиболее часто используемых функций SciPy и привели примеры их применения. Обладая этими знаниями, вы можете начать использовать SciPy в своих проектах и в полной мере воспользоваться её мощными возможностями.

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.