Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

SciPy в Python: исчерпывающее руководство по библиотекам и функциям

SciPy в Python

SciPy — библиотека с открытым исходным кодом, расширяющая NumPy для решения математических, научных, инженерных и технических задач. Построенная на NumPy, SciPy предлагает широкий набор высокоуровневых команд для манипуляции данными и визуализации.

Подпакеты

Это руководство охватывает:

Зачем использовать SciPy?

NumPy против SciPy

NumPy

SciPy

Установка и настройка окружения

Установите SciPy с pip или системными менеджерами пакетов:

Python3 -m pip install --user numpy scipy
sudo apt-get install python-scipy python-numpy
sudo port install py35-scipy py35-numpy

Импорт SciPy и NumPy в скриптах:

from scipy import special
import numpy as np

Ввод-вывод файлов с scipy.io

Легко сохраняйте и загружайте MATLAB .mat файлы:

import numpy as np
from scipy import io as sio
array = np.ones((4, 4))
sio.savemat('example.mat', {'ar': array})
loaded = sio.loadmat('example.mat', struct_as_record=True)
print(loaded['ar'])

Вывод:

array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

Специальные функции — scipy.special

Примеры часто используемых специальных функций:

Линейная алгебра — scipy.linalg

Вычисление определителя, обратной матрицы, собственных значений и векторов:

from scipy import linalg
import numpy as np
A = np.array([[4,5],[3,2]])
print(linalg.det(A))        # -7.0
print(linalg.inv(A))        # обратная матрица
vals, vecs = linalg.eig(A)
print(vals)
print(vecs)

Вывод:

-7.0
array([[-0.28571429,  0.71428571],
       [ 0.42857143, -0.57142857]])
[ 9.+0.j -1.+0.j]
[[ 0.70710678 -0.5547002 ]
 [ 0.70710678  0.83205029]]

Дискретное преобразование Фурье — scipy.fftpack

Преобразование синусоиды и визуализация её спектра:

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
from scipy import fftpack

freq = 5
sample_rate = 50
t = np.linspace(0, 2, 2 * sample_rate, endpoint=False)
wave = np.sin(freq * 2 * np.pi * t)
plt.plot(t, wave)
plt.xlabel('Time (s)'); plt.ylabel('Amplitude')
plt.show()

A = fftpack.fft(wave)
frequency = fftpack.fftfreq(len(wave)) * sample_rate
plt.stem(frequency, np.abs(A))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.xlim(-sample_rate/2, sample_rate/2)
plt.ylim(0, 110)
plt.show()

Оптимизация — scipy.optimize

Поиск минимума скалярной функции с BFGS и глобального поиска с basin-hopping:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

def func(a):
    return a*2 + 20*np.sin(a)

plt.plot(np.linspace(-10, 10, 400), func(np.linspace(-10, 10, 400)))
plt.show()

min_bfgs = optimize.fmin_bfgs(func, 0)
print('BFGS result:', min_bfgs)

min_basin = optimize.basinhopping(func, 0)
print('Basin‑hopping result:', min_basin.x)

Вывод показывает локальный минимум, найденный BFGS, и глобальный оптимум, подтверждённый basin-hopping.

Алгоритм Nelder-Mead

Простая безусловная минимизация без информации о градиенте:

from scipy.optimize import minimize

def f(x):
    return 0.4*(1 - x[0])**2

res = minimize(f, [2, -1], method='Nelder-Mead')
print('Result:', res.x, 'Function value:', res.fun)

Обработка изображений — scipy.ndimage

Манипуляция изображениями: отображение, отражение, поворот, применение фильтров.

from scipy import ndimage, misc
from matplotlib import pyplot as plt

panda = misc.face()
plt.imshow(panda)
plt.title('Original')
plt.show()

flip_down = np.flipud(panda)
plt.imshow(flip_down)
plt.title('Flip Down')
plt.show()

rotated = ndimage.rotate(panda, 135)
plt.imshow(rotated)
plt.title('Rotated 135°')
plt.show()

Численное интегрирование — scipy.integrate

Одинарные и двойные интегралы с автоматической оценкой ошибки:

from scipy import integrate

# Одинарный интеграл x^2 от 0 до 1
single = integrate.quad(lambda x: x**2, 0, 1)
print('Single integral:', single)

# Двойной интеграл 64*x*y над треугольной областью
double = integrate.dblquad(lambda x, y: 64*x*y, 0, 2/4,
                           lambda x: 0, lambda y: (1 - 2*y**2)**0.5)
print('Double integral:', double)

Оба возвращают кортеж: (значение, оценка ошибки).

Резюме

SciPy расширяет NumPy, предоставляя полный стек научных вычислений, включая линейную алгебру, оптимизацию, статистику, обработку сигналов и манипуляцию изображениями. Её обширные подпакеты и надёжная поддержка сообщества делают её незаменимой для исследователей и инженеров.

Имя пакетаОписание
scipy.ioВвод-вывод файлов для MATLAB, CSV, NetCDF и др.
scipy.specialСпециальные математические функции (Бессель, Гамма и др.)
scipy.linalgПродвинутые подпрограммы линейной алгебры
scipy.interpolateМетоды интерполяции
scipy.optimizeИнструменты оптимизации и подгонки кривых
scipy.statsСтатистические распределения и генерация случайных чисел
scipy.integrateЧисленное интегрирование (quad, dblquad и др.)
scipy.fftpackБыстрые преобразования Фурье
scipy.signalУтилиты обработки сигналов
scipy.ndimageМногомерная обработка изображений

Python

  1. Функция print() в Python: практическое руководство с примерами
  2. Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
  3. Мастерство строк форматирования format() в Python: понятные примеры
  4. Освоение лямбда-функций Python: практические примеры и лучшие практики
  5. Функция abs() в Python: вычисление абсолютных значений для чисел и комплексных чисел
  6. Функция round() в Python: подробное объяснение с практическими примерами
  7. Освоение функции map() в Python: синтаксис, примеры и лучшие практики
  8. Python timeit(): измерение времени выполнения с практическими примерами
  9. Освоение yield в Python: генератор против return — практическое руководство
  10. Понимание type() и isinstance() в Python: практические примеры