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