Джим Хугунин разработал предка библиотеки NumPy — Numeric и дополнительный пакет функций — Numarray. Сама эта библиотека появилась только в 2005 году благодаря Трэвису Олифанту, который добавил несколько особенностей Numarray в Numeric.
Что такое NumPy и зачем она нужна
NumPy, или Numerical Python — это библиотека Python, которая предлагает:
- мощный N-мерный массив;
- высокоуровневые функции;
- инструменты для интеграции кода C/C++ и Fortran.
А еще — эффективный многомерный контейнер общих данных. С помощью библиотеки можно определять произвольные типы.
Библиотека NumPy представляет собой базу данных с исходным кодом в открытом виде. Автор — проект SciPy. Библиотека помогает в различных задачах. Например:
- linalg — реализация решений из линейной алгебры.
- random — реализация функций для бесперебойной работы со случайными величинами.
- fft — реализация прямого и обратного преобразования Фурье.
Научитесь создавать сервисы на языке Python и освойте профессию разработчика за 10 месяцев. Пройдите курс Skypro с гарантией трудоустройства — вас ждут новая работа, диплом установленного образца, портфолио с семью проектами на GitHub и полезные знакомства. Программа обучения соответствует требованиям к вакансиям начинающих Python-разработчиков на 100%.
Обзор NumPy
Есть несколько базовых понятий и функций NumPy, которые обязательно нужно изучить, чтобы свободно пользоваться библиотекой.
Как создавать массивы
Вариантов несколько:
-
- Переделать список в NumPy-массивы
X = np.array([[7, 8, 9], [10, 11, 12]]) X Out: array([[7, 8, 9], [10, 11, 12]])
- Сделать копию.
Y = X.copy() Y Out: array([[7, 8, 9], [10, 11, 12]])
- Сделать нулевой или единичный вариант определенного размера.
A = np.zeros((2, 3)) A Out: array([[0., 0., 0.], [0., 0., 0.]])
B = np.ones((3, 2)) B Out: array([[1., 1.], [1., 1.], [1., 1.]])
- Использовать примеры из библиотеки.
A = np.array([[1, 2, 3], [4, 5, 6]]) B = np.zeros_like(A) B Out: array([[0, 0, 0], [0, 0, 0]])
A = np.array([[1, 2, 3], [4, 5, 6]]) B = np.ones_like(A) B Out: array([[1, 1, 1], [1, 1, 1]])
Если нужен двумерный квадратный, то можно сделать его единичной матрицей диагонального типа:
A = np.eye(3) A Out: array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
Сделать от From (вкл) до To (не вкл) с шагом Step:
From = 3.5 To = 6 Step = 0.5 A = np.arange(From, To, Step) A Out: array([3.5, 4. , 4.5, 5. , 5.5])
Изначально from = 0, step = 1, из-за этого есть вариант с одним параметром, который интерпретируется как To:
A = np.arange(3) A Out: array([0, 1, 2])
Либо с двумя — как From и To:
A = np.arange(20, 26) A Out: array([20, 21, 22, 23, 24, 25])
В третьем методе размеры передавались одним параметром (кортеж размеров). Вторым (в способах № 3 и № 4) можно указать желаемый тип элементов.
A = np.zeros((2, 3), 'int') A Out: array([[0, 0, 0], [0, 0, 0]])
B = np.ones((3, 2), 'complex') B Out: array([[1.+0.j, 1.+0.j], [1.+0.j, 1.+0.j], [1.+0.j, 1.+0.j]])
Благодаря методу astype массив приводят к другому типу:
A = np.ones((3, 2)) B = A.astype('str') B Out: array([['1.0', '1.0'], ['1.0', '1.0'], ['1.0', '1.0']], dtype='<U32')
Каждый тип есть в словаре sctypes:
np.sctypes Out: {'int': [NumPy.int8, NumPy.int16, NumPy.int32, NumPy.int64], 'uint': [NumPy.uint8, NumPy.uint16, NumPy.uint32, NumPy.uint64], 'float': [NumPy.float16, NumPy.float32, NumPy.float64, NumPy.float128], 'complex': [NumPy.complex64, NumPy.complex128, NumPy.complex256], 'others': [bool, object, bytes, str, NumPy.void]}
Базовые функции
- Переделать список в NumPy-массивы
- Есть такой объект:
a = np.array([1,2,3], dtype='int32') print(a) [1 2 3]
Для определения количества измерений есть функция ndim:
print(a.ndim) 1
Здесь одномерный массив или вектор. Но для двумерного результат оказался бы другим:
b = np.array([[1, 2, 3], [4, 5, 6]]) print(b.ndim) 2
Для подсчета количества строк и столбцов есть функция shape:
print(a.shape) (3, )
Объяснение результата: вектор — это одномерный массив. У него в библиотеке NumPy есть только строки или элементы, поэтому функция shape выдала число 3.
С двумерными массивами ситуация понятнее:print(b.shape) (2, 3)
В b — две строки и три столбца.
Для остальных массивов функция shape будет добавлять дополнительные цифры в кортеже через запятую:с = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print(c.shape) (2, 2, 3)
Читается это так: в объекте два трехмерных массива с двумя строками и тремя столбцами.
Кроме размерностей, указывают тип элементов через функцию dtype. Если не присваивать тип элементам вручную, по умолчанию будет задан int32. Количество элементов указывают через функцию size.
Функции itemsize и nbytes показывают, что количество байт в памяти занимает один элемент, а еще — какой объем байт во всём массиве. Один элемент занимает три байта, а весь объект b из девяти элементов — 3 * 9 = 27 байт.
Научиться применять эти и другие функции в разработке можно на курсе Skypro «Python-разработчик». За несколько месяцев изучите базовую теорию и отработаете новые навыки на практических заданиях. Во время всего обучения студентов поддерживают опытные наставники и кураторы. А специалисты центра карьеры помогают составить резюме и подготовиться к собеседованиям.
Доступ к элементам
NumPy-массивы позволяют смотреть элементы по отдельности или в сумме. Еще они дают возможность изменить значение внутри самого массива.
✔️ Помните, что замене подлежит как отдельный элемент, так и любые последовательности элементов.
Для этих целей есть специальная конструкция с полноценной и упрощенной версиями.
Создание специальных массивов
NumPy может создавать массивы с уже забитыми ячейками — нулями или единицами.
-
- Массив NumPy из нулей через функцию zeros:
a = np.zeros((2, 2)) print(a) [[0. 0.] [0. 0.]]
Размер задается кортежем (2, 2). Если указать без скобок — будет ошибка:
a = np.zeros(2, 2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Cannot interpret '2' as a data type]
Без скобок NumPy расценивает второй элемент как тип данных, который указывается для параметра dtype.
Если указать одно число, получится вектор размером в два элемента. Тогда дополнительные скобки не нужны:a = np.zeros(2) print(a) [0. 0.]
Стандартно элементам присваивается тип float64. Это дробные числа, которые занимают в памяти 64 бита, или 8 байт. Для получения целых чисел укажите это в параметре dtype через запятую:
a = np.zeros(2, dtype='int32') print(a) [0 0]
-
- Массив NumPy из единиц через функцию ones:
b = np.ones((4, 2, 2), dtype='int32') print(b) [[[1 1] [1 1]] [[1 1] [1 1]] [[1 1] [1 1]] [[1 1] [1 1]]]
Здесь создан трехмерный массив из четырех двумерных, каждый из которых имеет две строки и два столбца. Элементы — с типом int32.
- Массив NumPy из произвольных чисел, отличных от нуля и единицы, через функцию full:
c = np.full((2, 2), 5) print(c) [[5 5] [5 5]]
Сначала указали размер массива через кортеж — (2, 2), потом число, которым заполним элементы, — 5.
- Массив NumPy случайных чисел через функции random.rand:
d = np.random.rand(3, 2) print(d) [[0.76088962 0.14281283] [0.32124888 0.34894434] [0.66903093 0.72899792]]
NumPy генерирует случайные числа в диапазоне от нуля до единицы с восемью знаками после запятой. Размер задается не через кортеж (3, 2), а через запятую — потому что в функции random.rand нет параметра dtype.
Массив случайных чисел через функцию random.randint:e = np.random.randint(-5, 10, size=(4, 4)) print(e) [[ 3 1 -4 3] [ 0 -2 5 3] [ 5 -1 9 2] [ 0 -4 9 -2]]
- Единичная матрица используется для линейной алгебры. По диагонали такой матрицы элементы равны единице, а остальные — нулю. Ее создают через функцию identity или eye:
i = np.identity(4) print(i) [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]]
Математические операции
Массивы из NumPy можно использовать по-разному. Главное их преимущество — в поддержании стандартных арифметических операций. Например, в NumPy Python доступны сложение, деление, вычитание. Эта библиотека вычисляет синусы и многое другое из линейной алгебры, математической статистики.
Копирование и организация
Если в NumPy вы присвоите массив другой переменной, то получится ссылка на этот самый массив. Если в какой-то момент работы с программой потребуется создание независимой копии, то для этого есть функция copy. А для изменения объема и размера массива — функция reshape.
Дополнительные возможности
Можно использовать функцию накладывания или наслоения одних массивов поверх других: vstack и hstack.
Библиотека способна прочесть файлы с жесткого диска или данные из файла. Булевы выражения позволяют пользователям библиотеки получать информацию о том, какие элементы отвечают определенным условиям.
Как установить NumPy
Можно использовать платформу Anaconda: там большой выбор разных библиотек, которые подойдут для работы Python.
- Перейдите на официальный сайт и скачайте последнюю версию софтов.
- Откройте установщик и установите программы по инструкции.
- Когда Python установится, откройте консоль и введите команду python3 для запуска интерпретатора Python.
В Anaconda есть много полезностей — NumPy, SciPy, Pandas, потому дополнительных установок не требуется. Достаточно проверить, что нужная библиотека работает. Для этого введите команды: import NumPy as np, потом a = np.array ([1,2,3]). Выведите значение переменной a — чтобы убедиться, что всё работает: print (a).
Можно установить библиотеки без лишних файлов через интегрированного питоновского менеджера пакетов PIP. Для этого нужно:
- установить Python;
- открыть программу и перейти во вкладку Downloads;
- выбрать место установки и согласиться с пунктами;
- потом скачать библиотеку NumPy.
На курсе Skypro «Python-разработчик» освоите основные инструменты программирования, получите опыт на реальных проектах и сможете стартовать в профессии уверенным новичком. Преподаватели — практикующие программисты с большим опытом, а в центре карьеры помогут составить цепляющее резюме и подготовиться к собеседованию.
Главное о библиотеке NumPy
- NumPy нужна для решений из линейной алгебры, реализации функций для бесперебойной работы со случайными величинами и прямого и обратного преобразования Фурье.
- Есть NumPy-функции для определения количества измерений, подсчета строк и столбцов, создания специальных массивов, математических операций и многого другого.
- Установить NumPy можно двумя способами: через Anaconda и PIP.
Добавить комментарий