Модуль numpy на Python
В python все объекты хранят определенный тип данных. Одними из самых популярных методов структурирования этих данных считаются массивы и матрицы. Работать с ними можно напрямую, а можно упростить себе задачу, используя модуль numpy.
О модуле
Numpy был разработан в 1955 году. В его основу легли такие языки, как C и Фортран. Оба языка способны проводить сложные математические операции на кратчайшие сроки. Следственно, numpy отличается особой производительностью при работе с массивами. Связка Pandas,mathlib, и numpy – главный ингредиент любого специалиста в обработке больших данных.
Начало работы с numpy
Модуль не относится к стандартной библиотеке python, а потому требует дополнительной установки через pip-инсталлятор. Для установки numpy откройте командную строку и введите следующую команду:
pipinstallnumpy
При установке возможно следующая ошибка:
Это означает, что инсталлятор должен обновиться. Проблема решается легко. Вводим «python -m pipinstall –upgradepip», а после снова вводим предыдущую команду. Готово! Теперь эта библиотека установлена на вашем компьютере и ее можно импортировать в проект. Для этого добавляем в начало кода следующую строку:
1. importnumpy
Примеры использования numpy
Чаще всего модуль используют в Datascience для анализа больших данных. Мы обойдемся более простым примером:
importmatplotlib.pyplot as plt
importnumpy as np
x = np.linspace(-5, 5, 100)
def sigmoid(alpha):
return1 / ( 1 + np.exp(- alpha * x) )
dpi = 80
fig = plt.figure(dpi = dpi, figsize = (512 / dpi, 384 / dpi) )
plt.plot(x, sigmoid(0.5), ‘ro-‘)
plt.plot(x, sigmoid(1.0), ‘go-‘)
plt.plot(x, sigmoid(2.0), ‘bo-‘)
plt.legend([‘A = 0.5’, ‘A = 1.0’, ‘A = 2.0’], loc = ‘upper left’)
fig.savefig(‘sigmoid.png’)
Благодаря модулю не пришлось вручную прописывать циклы для расставления точек на графике, все просчиталось автоматически. Удобно и быстро.
- Вообще, numpy– это подходящее решение, если вам необходимо:
- Провести операции с массивами и матрицами
- Выполнить сложные арифметические задачи с большими данными
- Построить статистику на основе данных
Математика в numpy
Со списками в питоне невыносимо трудно проводить математические операции. Дело в том, что при использовании знаков +, *, — по отношению к списку, происходит процесс конкатенации, а не вычисления.
Пример:
list1 = [7, 8, 9]
number = 3
print(list1 * number) # [7, 8, 9, 7, 8, 9, 7, 8, 9]
print(list1 + number) #Typeerror – невозможно соединить список и число
Но если мы изначально превратим list1 в массив, то ситуация кардинально изменится:
list1 = [7, 8, 9]
number = 3
array1 = numpy.array(list1)
print(array1 * number) # [21 24 27]
print( array1 + number) # [10 11 12]
print(array1 — number) # [4 5 6]
Как вы видите, при работе с массивами, все математические операции работают по прямому назначению.
Ниже представлен список некоторых математических функций, которые имеются в модуле numpy:
- numpy.log(n) – Поиск натурального логарифма элементов массива;
- np.sin(n) – Синус каждого элемента массива;
- np.arange(n) – создать последовательность от 0 до n;
- np.cos(n) – косинус каждого элемента массива;
- np.hypot(a, b) – вычисление гипотенузы по двум катетам. c2 = a2 + b2;
- np.rint(n) – округление до ближайшего числа.
Модуль также поддерживает сравнение массивов. Пример:
array1 = numpy.array([1, 2, 4, 5, 6])
array2 = numpy.array([1, 2, 3, 5, 7])
print(array1 == array2) # [ True True False True False]
Работа с матрицей
Вопреки легендарному фильму, матрицы – это лишь последовательность данных, которые расположены по горизонтали, вертикали, и в глубину. Любой двумерный массив – это уже матрица.
Как мы помним из школьного курса Алгебры: Матрицы можно складывать, перемножать, транспонировать. Если первые два варианта мы рассмотрели выше, то транспонирование рассмотрим сейчас:
importnumpy as np
a = np.array([[0, 1, 2], [4, 5, 6]])
a = a.transpose()
print(a) # [[0 4]
[1 5]
[2 6]]
Напомним, что транспонирование – это обмен местами строк и столбцов, то есть:
0 1 2
4 5 6
После транспонирования становится:
0 4
1 5
2 6
Массивы в numpy
Выше мы видели несколько примеров создания массивов. В основном все примеры сводились к математическим операциям, но потенциал модуля намного выше. Выводит можно как отдельные строки, столбцы, так и элементы. Делается это через квадратные скобки. Пример:
a = np.array([[1, 3, 4], [5, 6, 7]])
print(a[0]) # выведется первая строка
print(a[0][0]) # выведется первый элемент первой строки
Список некоторых функций модуля для работы с массивами
- !=, <, <=, >, >= — логические операции. Возвращают True или False для каждого элемента массива.
- Numpy.sum(n) – сумма всех элементов массива
- n.min(), n.max() – поиск большего и меньшего числа в массиве
- np.zeros(n) – Возвращает заполненный нулями массив до n элемента
- np.ones(n) – Возвращает заполненный единицами массив от nэлемента
Индексация массивов
Если вы до сих пор не понимаете, как индексируются двумерные массивы, то это не страшно. Сейчас разберем. Представим себе двумерный массив. Он выглядит таким образом:
1 2 3
4 5 6
7 8 9
- 1 2 3 – это первая строка
- 1 4 7 – это первый столбец
- 4 – это первый элемент второй строки.
Теперь посмотрим с точки зрения python. В программном коде это выглядит так:
Array = numpy.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
1 2 3 – это три элемента первого вложенного массива. Их можно вызвать с помощью команды Array[0]. Чтобы вывести 4 элемент 2 строки используем следующую команду Array[2][4]. Вывести столбец будет сложнее:
i = 1
print(Array[:, i:i+1])
Глубина матриц
У матриц существует строки, столбцы, а также третий вектор, который ведет вглубь массива. Пример такой трехмерной матрицы:
Array = numpy.array([
[[1,2,3],[4,5,6], [7,8,9]],
[[10,11,12], [13,14,15], [16,17,18]],
[[19,20,21], [22,23,24],[25,26,27]]
])
Сложная конструкция? Да, но, к счастью, трехмерные массивы используются редко, да и в тех случаях забиваются пользователем. Но все же давайте разберем эту конструкцию. Как же обратиться к 3 элемента глубины 3-го элемента первой строки. Для этого нам достаточно указать имя_массива[номер_строки][номер_элемента][номер_элемента_вглубь].
Пример:
Array[1][2][2] # 3
Работа со звуком
В завершение статьи, продемонстрируем использование библиотеки numpy для работы со звуком. Следующий элемент кода:
importnumpy as np
fromscipy.io.wavfile import writedata = np.random.uniform(-1,1,44100) # 44100 random samples between -1 and 1
scaled = np.int16(data/np.max(np.abs(data)) * 32767)
write(‘test.wav’, 44100, scaled)
Через последовательность массива мы закодировали звуковой файл. При запуске программы появляется белый шум. Вы можете поиграть со значением 44100. Изменяя его, вы будете изменять и звучание конечного аудиофайла.
Заключение
Numpy имеет богатый функционал и широкое применение в мире программирования. Если вы изучаете pythonради нейронных сетей, анализа больших данных, решения математических задачи подобной деятельности, то numpy это must have для вас.