1K подписчиков

Программирование на языке Python. Библиотека numpy. Математические численные функции и другие возможности

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Продолжение статей по numpy

Справочник математических функций по numpy и другие возможности

Продолжаем изучать библиотеку numpy. Сегодня справочник стандартных математических функций и некоторые другие особенности этой замечательной библиотеки.

Справочник числовых математических функций numpy

В начале перечислим основные математические функции numpy. Набор, кстати, впечатляет. Сегодня только унарные функции.

  • abs, fabs — вычисляет абсолютные значения каждого элементов массива;
  • sqrt — вычисляет квадратный корень из каждого элемента массива;
  • square — вычисляет квадрат каждого элемента массива;
  • exp — вычисляет экспоненту от каждого элемента массива;
  • log, log10, log2, log1p — вычисляет натуральный, десятичный логарифмы, логарифм по основанию 2 и log(1 + x), соответственно;
  • sign — вычисляет знак каждого элемента: 1 (положительный элемент), 0 (ноль), −1 (отрицательный элемент);
  • ceil — вычисляет наименьшее целое число большее либо равное каждого элемента массива;
  • floor — вычисляет наибольшее целое число меньшее либо равное каждого элемента массива;
  • rint — округляет элементы к ближайшим целым сохраняя dtype;
  • modf — возвращает дробные и целые части каждого элемента массива;
  • isnan — возвращает логический массив (True, False), указывающий является каждый элемент входного массива NaN (Not A Number - не число);
  • isfinite, isinf — возвращает булев массив, указывающий является каждый элемент конечным (не inf и не NaN) или бесконечным, соответственно? inf от infinity, т.е. бесконечность;
  • cos, cosh, sin, sinh, tan, tanh — тригонометрические и гиперболические функции;
  • arccos, arccosh, arcsin, arcsinh, arctan, arctanh — обратные тригонометрические и гиперболические функции;
  • logical_not — вычисляет логическое not для каждого элемента массива.

Бинарные функции библиотеки numpy мы представим в следующей статье.

Самое приятное в библиотеке numpy это то, что мы спокойной можем её использовать для обычных величин, тем самым превзойдя возможности стандартной библиотеки math

#!/usr/bin/python3
import numpy as np
e = np.exp(1)
print(e)

Результат выполнения фрагмента

2.718281828459045

При воздействии на массив функция действует на каждый элемент массива

#!/usr/bin/python3
import numpy as np
nmp1 = np.array([0, 1.23, 3.1, 1.111, 4.4])
print(nmp1)
nmp2 = np.modf(nmp1)
print(nmp2)

Результат выполнения программы

[0.    1.23  3.1   1.111 4.4  ]
(array([0.   , 0.23 , 0.1  , 0.111, 0.4  ]), array([0., 1., 3., 1., 4.]))

Обращу внимание, что функция modf() создаёт кортеж из двух массивов numpy. Первый содержит дробную часть чисел исходного массива, второй целую часть исходного массива.

Простые действия над массивами в numpy

Ну, а теперь рассмотрим простые действия с массивами в библиотеке numpy.

В следующем примере и объяснять ничего не нужно, достаточно посмотреть на результаты

#!/usr/bin/python3
import numpy as np
a = np.full((3, 2),3,dtype=np.int64)
b = np.full((3, 2),2,dtype=np.int64)
c = a + b
print(c)
c = a - b
print(c)
c = a * b
print(c)
c = a / b
print(c)

Результат выполнения программы

[[5 5]
[5 5]
[5 5]]
[[1 1]
[1 1]
[1 1]]
[[6 6]
[6 6]
[6 6]]
[[1.5 1.5]
[1.5 1.5]
[1.5 1.5]]

Как, видите всё тут ясно. Следует только отметить метод full() позволяющий задавать массив нужно размерности и заполнения. Вообще функций, с помощью которых можно автоматизировать создание массивов в numpy несколько. Мы перечислим их в следующей статье.

А теперь массив и скаляры.

#!/usr/bin/python3
import numpy as np
a = np.full((3, 2),3,dtype=np.int64)
c = a * 2
print(c)
c =  2 / a
print(c)
c = a + 10
print(c)


Результат выполнения программы

[[6 6]
[6 6]
[6 6]]
[[0.66666667 0.66666667]
[0.66666667 0.66666667]
[0.66666667 0.66666667]]
[[13 13]
[13 13]
[13 13]]

Результаты тоже вполне понятны.

А теперь интересный пример, логическое действие между массивами.

#!/usr/bin/python3
import numpy as np
a = np.full((3, 2),3,dtype=np.int64)
b = np.array([[1, 2], [3, 4], [5, 6]])
c = a > b
print(c)

Результат выполнения

[[ True  True]
[False False]
[False False]]

Согласитесь, интересный результат.

Также можно поэлементно выполнять операции & - логическое 'И', | - логическое 'ИЛИ', ^ - логическое 'исключающее ИЛИ'.

Ещё о поиске элементов массива в numpy

Ну, а теперь вернусь к вопросу, который я поднял в прошлой статье. Вопрос о поиске в массиве. Поиск можно осуществлять обычным перебором (а их даже несколько), но есть и специальное средство, это функция numpy.where().

#!/usr/bin/python3
import numpy as np
a = np.array([[3, 2], [3, 4], [5, 6]])
x = np.where(a==3)
print(x)

Результат выполнения

(array([0, 1]), array([0, 0]))

Т.е. получили кортеж, состоящий из двух массивов с координатами - в первом массиве значения строк, в втором значения столбцов.

Условиями поиска, естественно могут быть также и '>', '<', '=>', '=<', '!='.

Ну, пока всё!

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

Сдаётся мне, что сгодится нам эта библиотека
Сдаётся мне, что сгодится нам эта библиотека