numpy что за библиотека
NumPy в Python. Часть 1
Предисловие переводчика
Доброго времени суток, Хабр. Запускаю цикл статей, которые являются переводом небольшого мана по numpy, ссылочка. Приятного чтения.
Введение
Установка
Если у вас есть Python(x, y) (Примечание переводчика: Python(x, y), это дистрибутив свободного научного и инженерного программного обеспечения для численных расчётов, анализа и визуализации данных на основе языка программирования Python и большого числа модулей (библиотек)) на платформе Windows, то вы готовы начинать. Если же нет, то после установки python, вам нужно установить пакеты самостоятельно, сначала NumPy потом SciPy. Установка доступна здесь. Следуйте установке на странице, там всё предельно понятно.
Немного дополнительной информации
Сообщество NumPy и SciPy поддерживает онлайн руководство, включающие гайды и туториалы, тут: docs.scipy.org/doc.
Импорт модуля numpy
Есть несколько путей импорта. Стандартный метод это — использовать простое выражение:
Тем не менее, для большого количества вызовов функций numpy, становится утомительно писать numpy.X снова и снова. Вместо этого намного легче сделать это так:
Это выражение позволяет нам получать доступ к numpy объектам используя np.X вместо numpy.X. Также можно импортировать numpy прямо в используемое пространство имен, чтобы вообще не использовать функции через точку, а вызывать их напрямую:
Однако, этот вариант не приветствуется в программировании на python, так как убирает некоторые полезные структуры, которые модуль предоставляет. До конца этого туториала мы будем использовать второй вариант импорта (import numpy as np).
Массивы
Главной особенностью numpy является объект array. Массивы схожи со списками в python, исключая тот факт, что элементы массива должны иметь одинаковый тип данных, как float и int. С массивами можно проводить числовые операции с большим объемом информации в разы быстрее и, главное, намного эффективнее чем со списками.
Создание массива из списка:
Здесь функция array принимает два аргумента: список для конвертации в массив и тип для каждого элемента. Ко всем элементам можно получить доступ и манипулировать ими так же, как вы бы это делали с обычными списками:
Массивы могут быть и многомерными. В отличии от списков можно использовать запятые в скобках. Вот пример двумерного массива (матрица):
Array slicing работает с многомерными массивами аналогично, как и с одномерными, применяя каждый срез, как фильтр для установленного измерения. Используйте «:» в измерении для указывания использования всех элементов этого измерения:
Метод shape возвращает количество строк и столбцов в матрице:
Метод dtype возвращает тип переменных, хранящихся в массиве:
Тут float64, это числовой тип данных в numpy, который используется для хранения вещественных чисел двойной точности. Так же как float в Python.
Метод len возвращает длину первого измерения (оси):
Метод in используется для проверки на наличие элемента в массиве:
Массивы можно переформировать при помощи метода, который задает новый многомерный массив. Следуя следующему примеру, мы переформатируем одномерный массив из десяти элементов во двумерный массив, состоящий из пяти строк и двух столбцов:
Обратите внимание, метод reshape создает новый массив, а не модифицирует оригинальный.
Имейте ввиду, связывание имен в python работает и с массивами. Метод copy используется для создания копии существующего массива в памяти:
Списки можно тоже создавать с массивов:
Можно также переконвертировать массив в бинарную строку (то есть, не human-readable форму). Используйте метод tostring для этого. Метод fromstring работает в для обратного преобразования. Эти операции иногда полезны для сохранения большого количества данных в файлах, которые могут быть считаны в будущем.
Заполнение массива одинаковым значением.
Транспонирование массивов также возможно, при этом создается новый массив:
Многомерный массив можно переконвертировать в одномерный при помощи метода flatten:
Два или больше массивов можно сконкатенировать при помощи метода concatenate:
Если массив не одномерный, можно задать ось, по которой будет происходить соединение. По умолчанию (не задавая значения оси), соединение будет происходить по первому измерению:
В заключении, размерность массива может быть увеличена при использовании константы newaxis в квадратных скобках:
Заметьте, тут каждый массив двумерный; созданный при помощи newaxis имеет размерность один. Метод newaxis подходит для удобного создания надлежаще-мерных массивов в векторной и матричной математике.
На этом у нас конец первой части перевода. Спасибо за внимание.
Python и DataScience: изучаем возможности универсальной библиотеки Numpy
От переводчика: это перевод материала Ракшита Васудева, давно и плотно изучающего DataScience и применение в ней языка Python. Автор рассказывает о мощной библиотеке Numpy, который позволяет реализовать многие возможности машинного обучения и работы с большими данными.
Numpy — математическая библиотека для Python. Она позволяет выполнять разного рода вычисления эффективно и быстро. Она значительно расширяет функциональность Python благодаря специальным решениям, которые в ней применяются. В этой статье рассказывается о базовых возможностях Numpy, и это только первая часть; чуть позже будут опубликованы и другие. Статья для тех, кто только начинает изучать Numpy, вступая в дивный мир математики в Python.
Skillbox рекомендует: Практический курс «Python-разработчик с нуля».
Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».
Импорт библиотеки
В этом месте мы говорим Python, что np — это референс для Numpy, который и будет использоваться впредь.
Теперь создадим массив python и массив np.
Большой разницы при выводе нет.
Хорошо, почему в таком случае лучше использовать массив numpy вместо обычного? Ответ — потому что np позволит нам быстрее производить вычисления и модифицировать общую архитектуру приложения.
np.arange()
([start],stop,[step]) упорядочивает цифры. Вот что это означает для машины.
Формируем np-список, начиная с 0 до 10, но не включаем 10, плюс увеличиваем цифры на 2 каждый раз.
Таким образом, у нас получается вот что:
array([0, 2, 4, 6, 8])
Важно помнить, что последняя цифра не включается в список.
Этот массив можно также назвать матрицей или вектором. Поэтому не переживайте, когда я говорю, например: «Форма матрицы — 2*3». Все это означает, что наш массив в итоге будет выглядеть примерно так:
Теперь давайте поговорим о таком параметре, как shape для массива np по умолчанию. Shape здесь — атрибут. Пример его использования — ниже.
Это матрица из чисел, где в ряду всего 9 элементов. В принципе, идеальной является матрица 1*9, не так ли?
В принципе, да, и для этого reshape() вступает в игру. Это метод, который изменяет размеры оригинальной матрицы так, как хотелось бы нам.
Вот пример использования reshape() на практике.
Обратите внимание, что reshape возвращает многомерную матрицу. На это указывают две квадратных скобки в начале. [[1, 2, 3, 4, 5, 6, 7, 8, 9]] является потенциально многомерной матрицей в отличие от [1, 2, 3, 4, 5, 6, 7, 8, 9].
Если взять параметр shape для B, то им будет (3,3):
Перейдем к np.zeros()
Что прописано в этом коде?
Именно: здесь задана матрица формата 3*4, заполненная нулями. Вот вывод:
np.zeros((n,m)) возвращает матрицу формата n*m, заполненную нулями. Все просто.
А что делает np.eye()?
Возвращает нам единичную матрицу с определенными характеристиками.
Как умножить две матрицы?
Нет проблем: для этого используется np.dot(), Эта функция — скалярное произведение, если в нее передали вектора и произведение матриц (самое обыкновенное).
Пример: A = (2,3) & B = (3,2). Здесь число столбцов в А — 3. Число строк в В — 3. Поскольку характеристики совпадают, умножение возможно.
Мы подготовили матрицы к умножению. Далее — действуем.
А теперь давайте добавим отдельные элементы в матрицу
np.sum() добавляет элементы в матрицу.
Однако у нас есть два варианта.
1. Складываем по строкам
6 — сумма первой строки (1, 2, 3).
15 — второй (4, 5, 6).
24 — третьей (7, 8, 9).
2. Складываем по столбцам
12 — сумма по первому столбцу (1, 4, 7).
15 — по второму (2, 5, 7).
18 — по третьему (3, 6, 9).
Ниже — видео, созданное автором, где все, что описано выше, объясняется еще раз, более наглядно.
Numpy что за библиотека
NumPy (Numeric Python, Числовой Python) — это библиотека для работы с многомерными массивами, также включает набор математических функций, которые применяются над ними. За счет собственной оптимизации кода на языке C и Fortran обеспечиваются быстрые вычисления по сравнению с обычными структурами данных в Python.
Особенности
Сферы применения
NumPy нашел большое количество применений в разных сферах деятельности. Перечислим некоторые из них:
Почему NumPy такой быстрый
Быстрота библиотеки обеспечивает за счет векторизации, которая описывает отсутствие каких-либо явных циклов, индексации и т. д. В коде эти вещи происходят «за кулисами» в оптимизированном, предварительно скомпилированном коде C. Векторизованный код имеет множество преимуществ, среди которых:
В основе векторизации лежит класс ndarray – многомерный контейнер элементов одного типа данных и размера (int32, float32 и т.д.). Объекты этого класса занимают меньше памяти, а операции над ними производятся быстрее, чем с обычными списками Python.
Создание массивов
Массивы ndarray могут быть созданы несколькими способами. Например, может создать массив явно:
Однако более удобный способ — это определить размер массива и заполнить его либо случайными значениям, либо значениями по порядку.
Очень часто требуются массивы для инициализации, например, массивы, которые состоят только из нулей или единиц. Этот метод предпочтительней, т.к. не использует затратную генерацию случайных чисел. Такие массивы могут быть созданы следующим образом:
NumPy
NumPy — это библиотека Python, которую применяют для математических вычислений: начиная с базовых функций и заканчивая линейной алгеброй. Полное название библиотеки — Numerical Python extensions, или «Числовые расширения Python».
У этой библиотеки есть несколько важных особенностей, которые сделали ее популярным инструментом. Во-первых, исходный ее код в свободном доступе хранится на GitHub, поэтому NumPy называют open-source модулем для Python.
Во-вторых, библиотека написана на языках C и Fortran. Это компилируемые языки (языки программирования, текст которых преобразуется в машинный код — набор инструкций для конкретного типа процессора. Преобразование происходит с помощью специальной программы-компилятора, благодаря нему вычисления на компилируемых языках происходят быстрее), на которых вычисления производятся гораздо быстрее и эффективнее, чем на интерпретируемых языках (языки программирования, которые не заточены под конкретный тип процессора и могут быть запущены на разных типах устройств). К этим языкам относится и сам Python.
Где используется NumPy
Как работает NumPy
Для начала разберемся в устройстве массивов, которые обрабатывает NumPy. Рассмотрим однородный двумерный массив. Он выглядит как простая таблица — две оси значений и ячейки внутри (элементы массива). Если появится третья ось, то массив станет трехмерным. Важное условие — все элементы должны иметь единый тип данных, например только целые числа.
Конечно, кроме двумерных массивов, библиотека NumPy обрабатывает и другие, с различным количеством осей. Эту вариативность обозначают числом N, как любую переменную в математической задаче. Поэтому обычно говорят, что NumPy работает с N-мерными массивами данных.
Читайте также: Кому и зачем нужен Python?
С этими данными NumPy производит вычисления, используя математические функции, генераторы случайных чисел, линейные уравнения или преобразования Фурье. Например, можно решить систему уравнений методом linalg.solve:
Как и сам Python, библиотека NumPy отличается простотой в изучении и использовании. Для начала работы достаточно освоить концепцию массивов. Например, в базовых арифметических вычислениях есть способ обработки массивов, который называют трансляцией или broadcasting.
Если в массиве величины указаны в милях, а результат нужно получить в километрах, можно умножить его на простое число 1,6 (скалярную величину). NumPy принимает самостоятельное решение умножить на заданное число каждый элемент в массиве, и пользователю не приходится прописывать для этого отдельную команду.
Подробной документации NumPy на русском языке до сих пор нет, а в рунете можно найти только краткие выжимки, в которых упущены многие моменты. Поэтому, чтобы стать специалистом высокого уровня в Data Science или Machine Learning, придется подтянуть английский. Начать можно с информации на официальном сайте.
Python для аналитики данных
Вы сможете автоматизировать сбор и анализ данных о ваших конкурентах, пользователях и потенциальных партнерах с помощью Python. Дополнительная скидка 5% по промокоду BLOG.
Как загрузить библиотеку?
Для загрузки NumPy просто введите в командной строке: import numpy as np. Не удивляйтесь, если библиотека окажется установленной, ведь модуль NumPy входит в состав множества пакетов и других библиотек.
Конечно, можно написать просто import numpy, ошибки в этом не будет. Но np — это общепринятое название, которое стало правилом и упростило процесс написания кода, поэтому, один раз прописав import numpy as np, в последующих строках можно использовать np вместо numpy.
NumPy, пособие для новичков. Часть 1
NumPy — это расширение языка Python, добавляющее поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами.
Первая часть учебника рассказывает об основах работы с NumPy: создании массивов, их атрибутах, базовых операциях, поэлементном применении функций, индексах, срезах, итерировании. Рассматриваются различные манипуляции с преобразованием формы массива, объединение массивов из нескольких и наоборот — разбиение одного на несколько более мелких. В конце мы обсудим поверхностное и глубокое копирование.
Основы
Если вы еще не устанавливали NumPy, то взять его можно здесь. Используемая версия Python — 2.6.
Основным объектом NumPy является однородный многомерный массив. Это таблица элементов (обычно чисел), всех одного типа, индексированных последовательностями натуральных чисел.
Под «многомерностью» массива мы понимаем то, что у него может быть несколько измерений или осей. Поскольку слово «измерение» является неоднозначным, вместо него мы чаще будем использовать слова «ось» (axis) и «оси» (axes). Число осей называется рангом (rank).
Например, координаты точки в трехмерном пространстве [1, 2, 1] это массив ранга 1 у него есть только одна ось. Длина этой оси — 3. Другой пример, массив
представляет массив ранга 2 (то есть это двухмерный массив). Длина первого измерения (оси) — 2, длина второй оси — 3. Для получения дополнительной информации смотрите глоссарий Numpy.
ndarray.ndim — число осей (измерений) массива. Как уже было сказано, в мире Python число измерений часто называют рангом.
ndarray.itemsize — размер каждого элемента массива в байтах. Например, для массива из элементов типа float64 значение itemsize равно 8 (=64/8), а для complex32 этот атрибут равен 4 (=32/8).
ndarray.data — буфер, содержащий фактические элементы массива. Обычно нам не будет нужно использовать этот атрибут, потому как мы будем обращаться к элементам массива с помощью индексов.
Пример
Создание массивов
Функция array() трансформирует вложенные последовательности в многомерные массивы. Тип массива зависит от типа элементов исходной последовательности.
Раз у нас есть массив, мы можем взглянуть на его атрибуты:
Тип массива может быть явно указан в момент создания:
Часто встречающаяся ошибка состоит в вызове функции array() с множеством числовых аргументов вместо предполагаемого единственного аргумента в виде списка чисел:
Функция zeros() создает массив нулей, а функция ones() — массив единиц:
Функция empty() создает массив без его заполнения. Исходное содержимое случайно и зависит от состояния памяти на момент создания массива (то есть от того мусора, что в ней хранится):
Печать массивов
Если массив слишком большой, чтобы его печатать, NumPy автоматически скрывает центральную часть массива и выводит только его уголки:
Если вам действительно нужно увидеть все, что происходит в большом массиве, выведя его полностью, используйте функцию установки печати set_printoptions() :
Copy Source | Copy HTML
>>> set_printoptions(threshold=nan)
Базовые операции
Некоторые операции делаются «на месте», без создания нового массива.
При работе с массивами разных типов, тип результирующего массива соответствует более общему или более точному типу.
По умолчанию, эти операции применяются к массиву, как если бы он был списком чисел, независимо от его формы. Однако, указав параметр axis можно применить операцию по указанной оси массива:
Универсальные функции
Индексы, срезы, итерации
У многомерных массивов на каждую ось приходится один индекс. Индексы передаются в виде последовательности чисел, разделенных запятыми:
Когда индексов меньше, чем осей, отсутствующие индексы предполагаются дополненными с помощью срезов:
Итерирование многомерных массивов начинается с первой оси:
Copy Source | Copy HTML
>>> for row in b:
. print row
.
[ 0 1 2 3 ]
[ 10 11 12 13 ]
[ 20 21 22 23 ]
[ 30 31 32 33 ]
[ 40 41 42 43 ]
Однако, если нужно перебрать поэлементно весь массив, как если бы он был одномерным, для этого можно использовать атрибут flat :
Copy Source | Copy HTML
>>> for element in b.flat:
. print element,
.
0 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 40 41 42 43
Манипуляции с формой
Форма массива может быть изменена с помощью различных команд:
Функция reshape() возвращает ее аргумент с измененной формой, в то время как метод resize() изменяет сам массив:
Объединение массивов
Функция column_stack() объединяет одномерные массивы в качестве столбцов двумерного массива:
Разделение одного массива на несколько более мелких
Функция vsplit() разбивает массив вдоль вертикальной оси, а array_split() позволяет указать оси, вдоль которых произойдет разбиение.
Копии и представления
При работе с массивами, их данные иногда необходимо копировать в другой массив, а иногда нет. Это часто является источником путаницы среди новичков. Возможно всего три случая:
Вообще никаких копий
Python передает изменяемые объекты как ссылки, поэтому вызовы функций также не создают копий:
Представление или поверхностная копия
Разные объекты массивов могут использовать одни и те же данные. Метод view() создает новый объект массива, являющийся представлением тех же данных.
Срез массива это представление: