Как подключить библиотеку numpy в python
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 стал популярен благодаря своей богатой библиотеке. Я его воспринимаю как некоего начальника, который через свои команды раздает задачи подчиненным. Они выполняются и на выходе получается некий результат работы программы:
Из всех известных мне языков высокого уровня, этот, наверное, самый высокий, а потому, один из самых удобных в реализации алгоритмов. Но чтобы им успешно пользоваться нужно уметь раздавать приказы подчиненным. И в этой серии занятий мы познакомимся с еще одним исполнителем языка Python – пакетом NumPy.
Вообще, NumPy предназначен для выполнения научных вычислений и активно используется не только в качестве самостоятельной библиотеки учеными и преподавателями по всему миру, но и входит в состав многих других популярных пакетов. С одним из них – Keras, мы с вами недавно познакомились, когда изучали основы работы НС. И вы могли заметить, что вначале программ фигурировала строчка:
Это, как раз, выполнение импорта того самого пакета NumPy.
Но почему он стал так популярен? Причин несколько. Самое главное, критичные по скорости вычисления фрагменты реализованы на языках Си и Фортран. Также он имеет довольно простой и продуманный синтаксис, а, значит, им легко пользоваться. Ну и, наконец, богатство возможностей этой библиотеки, начиная с базовых математических функций и заканчивая работой с полиномами, линейной алгеброй и многомерными матрицами (тензорами). Все это очень часто используется в инженерных задачах, отсюда и высокая популярность пакета.
Установка NumPy
Я думаю, вы прониклись уважением к этому пакету, и пришла пора прикоснуться к «святому граалю». В начале, как всегда, его нужно установить. Сделать это чрезвычайно просто, достаточно выполнить в терминале команду:
Не удивляйтесь, если этот пакет у вас уже установлен, так как он входит в состав многих других библиотек. Проверить установку можно командой:
Если такая программа выполняется без ошибок, то этот «святой грааль» уже присутствует на вашем устройстве и готов к истязаниям.
У вас здесь уже может возникнуть вопрос: почему импорт записан в таком виде? А не просто: import numpy? Можно и так, но тогда в программе все время придется использовать префикс numpy. Гораздо удобнее писать две буквы «np». Поэтому общепринятой практикой стало импортирование этого пакета именно в таком виде. Я буду следовать сложившейся традиции и делать также.
Фундаментальный элемент NumPy – массив (array)
Отлично, сложнейший этап установки и импорта пакета позади. Пришло время сделать первые шаги и вначале познакомиться с его фундаментальным элементом – однородным многомерным массивом. В NumPy элементы массива имеют единый тип данных. Их индексы описываются кортежем целых неотрицательных чисел. Размерность кортежа – это ранг массива (то есть, размерность массива), а каждое число в кортеже представляет свою отдельную ось:
Как создать массив в NumPy? Существует много способов, но базовый реализуется через функцию:
Здесь в качестве первого параметра object может выступать список или кортеж, а также функция или объект, возвращающий список или кортеж. Второй параметр dtype – это тип элементов массива. Если указано значение None, то тип будет определяться автоматически на основе переданных данных. Подробнее об этой функции можно, как всегда, почитать на странице официальной документации:
Итак, в самом простом варианте можно создать одномерный массив так:
В результате получим объект типа array с элементами 1, 2, 3, 4:
Какой будет тип у этих элементов? Мы можем его посмотреть с помощью атрибута dtype, выполнив в консоли строчку:
То есть, автоматически был применен целочисленный тип размерностью 32 бит. Ну, хорошо, а что если попробовать создать массив с разными типами его элементов, например, так:
В результате увидим, следующее содержимое:
Например, для нашего одномерного случая, мы можем взять первый элемент из массива a, следующим образом:
Увидим значение ‘1’. Обратите внимание, первый элемент имеет индекс 0, а не 1. Единица – это уже второй элемент:
Для изменения значения элемента, достаточно присвоить ему новое значение, например:
в результате получим массив:
А что будет, если мы попробуем присвоить значение другого типа данных, например, число:
Ошибки не будет, а значение автоматически будет преобразовано в строку:
Разработчики пакета NumPy постарались сделать его максимально дружественным, чтобы инженер сосредотачивался именно на решении задачи, а не на нюансах программирования. Поэтому везде, там где это допустимо, пакет NumPy берет на себя разрешение подобных нюансов. И, как показала практика, это очень удобно и заметно облегчает жизнь нам, простым смертным.
Минутка восхищения или что такого в массивах NumPy
Но, все-таки, что такого в массивах NumPy, что они повсеместно используются в разных библиотеках? Давайте я приведу несколько примеров, и вы сами все увидите.
Предположим, мы определили одномерный массив с числами от 1 до 9:
Мы уже знаем как взять один отдельный элемент, но что будет, если прописать индексы для всех 9 элементов:
На выходе увидим одномерный массив из двоек:
array([2, 2, 2, 2, 2, 2, 2, 2, 2])
тогда получим аналогичный массив, но размерностью 5 элементов:
Как видите, индексирование здесь более гибкое, чем у обычных списков Python. Или, вот еще один характерный пример:
Результат будет следующим:
То есть, остаются элементы со значениями True и отбрасываются со значениями False. Обо всем этом мы еще будем подробно говорить.
Еще один пример. Предположим, нам понадобилось представить одномерный массив a в виде матрицы 3х3. Нет ничего проще, меняем его размерность:
и получаем заветный результат:
Далее, можем обращаться к элементам матрицы b так:
В обоих случаях будет взят один и тот же элемент со значением 6.
Все это лишь мимолетный взгляд на возможности пакета NumPy. Я здесь лишь хотел показать, насколько сильно отличаются массивы array от списков языка Python, и если вы хотите овладеть этим инструментом, то эта серия занятий для вас.
Видео по теме
#2. Основные типы данных. Создание массивов функцией array() | NumPy уроки
#3. Функции автозаполнения, создания матриц и числовых диапазонов | NumPy уроки
#4. Свойства и представления массивов, создание их копий | NumPy уроки
#5. Изменение формы массивов, добавление и удаление осей | NumPy уроки
#6. Объединение и разделение массивов | NumPy уроки
#7. Индексация, срезы, итерирование массивов | NumPy уроки
#8. Базовые математические операции над массивами | NumPy уроки
#9. Булевы операции и функции, значения inf и nan | NumPy уроки
#10. Базовые математические функции | NumPy уроки
#11. Произведение матриц и векторов, элементы линейной алгебры | NumPy уроки
#12. Множества (unique) и операции над ними | NumPy уроки
#13. Транслирование массивов | NumPy уроки
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
Введение и установка библиотеки NumPy / np 1
Немного истории
В ранние годы существования Python разработчикам необходимо было проводить сложные вычисления, особенно когда язык использовался в научном сообществе.
Первой попыткой упростить задачу был модуль Numeric. Его разработал программист по имени Джим Хагунин в 1995 году. Следом за ней появился пакет Numarray. Оба решения специализировались на вычислениях массивов. У каждого свои преимущества в зависимости от сценария. Поэтому и использовались они по обстоятельствам. Такая неопределенность привела к тому, что приняли решение объединить два пакета. Для этих целей Трэвис Олифант начал разработку библиотеки NumPy, первая версия которой вышла в 2006 году.
С тех пор NumPy стала библиотекой №1 в Python для научных вычислений и по сегодняшний день она является самым популярным пакетом для вычислений многомерных и просто крупных массивов. Он также включает множество функций, которые позволяют эффективно проводить операции и выполнять высокоуровневые математические расчеты.
Сейчас NumPy — это проект с открытым исходным кодом, который распространяется по лицензии BSD. В его развитии внесли свою лепту множество разработчиков.
Установка NumPy
Модуль представлен как пакет по умолчанию во множестве дистрибутивов Python, но если его нет, то для установки используйте одну из следующих команд.
В Linux (Ubuntu и Debian):
Когда NumPy установлен, импортируйте модуль с помощью этой команды.
Installing NumPy
CONDA
Python and NumPy installation guide
Installing and managing packages in Python is complicated, there are a number of alternative solutions for most tasks. This guide tries to give the reader a sense of the best (or most popular) solutions, and give clear recommendations. It focuses on users of Python, NumPy, and the PyData (or numerical computing) stack on common operating systems and hardware.
Recommendations
We’ll start with recommendations based on the user’s experience level and operating system of interest. If you’re in between “beginning” and “advanced”, please go with “beginning” if you want to keep things simple, and with “advanced” if you want to work according to best practices that go a longer way in the future.
Beginning users
On all of Windows, macOS, and Linux:
Advanced users
Windows or macOS
Linux
If you’re fine with slightly outdated packages and prefer stability over being able to use the latest versions of libraries:
Alternative if you prefer pip/PyPI
For users who know, from personal preference or reading about the main differences between conda and pip below, they prefer a pip/PyPI-based solution, we recommend:
Python package management
Managing packages is a challenging problem, and, as a result, there are lots of tools. For web and general purpose Python development there’s a whole host of tools complementary with pip. For high-performance computing (HPC), Spack is worth considering. For most NumPy users though, conda and pip are the two most popular tools.
Pip & conda
The first difference is that conda is cross-language and it can install Python, while pip is installed for a particular Python on your system and installs other packages to that same Python install only. This also means conda can install non-Python libraries and tools you may need (e.g. compilers, CUDA, HDF5), while pip can’t.
The second difference is that pip installs from the Python Packaging Index (PyPI), while conda installs from its own channels (typically “defaults” or “conda-forge”). PyPI is the largest collection of packages by far, however, all popular packages are available for conda as well.
The third difference is that conda is an integrated solution for managing packages, dependencies and environments, while with pip you may need another tool (there are many!) for dealing with environments or complex dependencies.
Reproducible installs
As libraries get updated, results from running your code can change, or your code can break completely. It’s important to be able to reconstruct the set of packages and versions you’re using. Best practice is to:
NumPy packages & accelerated linear algebra libraries
The NumPy wheels on PyPI, which is what pip installs, are built with OpenBLAS. The OpenBLAS libraries are included in the wheel. This makes the wheel larger, and if a user installs (for example) SciPy as well, they will now have two copies of OpenBLAS on disk.
In the conda defaults channel, NumPy is built against Intel MKL. MKL is a separate package that will be installed in the users’ environment when they install NumPy.
The MKL package is a lot larger than OpenBLAS, it’s about 700 MB on disk while OpenBLAS is about 30 MB.
MKL is typically a little faster and more robust than OpenBLAS.
Besides install sizes, performance and robustness, there are two more things to consider:
Troubleshooting
If your installation fails with the message below, see Troubleshooting ImportError.
2. Установка NumPy
2.1. NumPy в составе научных дистрибутивов Python
2.1.1. Anaconda
Чтобы установить дистрибутив Anaconda, сначала его нужно скачать с официального сайта. Прежде чем нажимать кнопку «download», уточните параметры своей платформы (допустим, у меня это Linux-x86 32 bit). Пока идет скачивание и установка, вы можете изучить доступные в вашем дистрибутиве пакеты и документацию к ним. Думаю, даже после беглого просмотра, вы убедитесь, что вы действительно имеете под рукой очень и очень много самых разнообразных инструментов.
Не смотря на то, что Anaconda сейчас является лидирующим по популярности дистрибутивом Python, не стоит забывать о других дистрибутивах. Все они предоставляют возможность работы со стеком SciPy и NumPy в частности. Помимо прочего, так же как и Anaconda они включают множество научных и вспомогательных библиотек. Однако, все они имеют значительные отличия от Anaconda.
2.1.2. ActivePython
Коммерческий (бесплатный период 30 дней) дистрибутив Python, предназначенный для быстрого внедрения и сопровождения серьезных проектов на базе Python. Содержит предварительно скомпилированные и настроенные решения практически для всех ключевых отраслей, что позволяет значительно сократить время на установку и настройку. Может быть установлен на целый ряд операционных систем. Содержит удобные инструменты для работы в Windows.
ActivePython полностью защищает от всех рисков, связанных с использованием ПО под лицензией GNU/GPL. Все пакеты доступные в собственном репозитории проверяются на безопасность и являются защищенными. Данный дистрибутив всегда включает только последнюю версию OpenSSL. Содержит обширную документацию, но при этом сама организация-разработчик обеспечивает техническую поддержку и всегда дает ответы даже на самые сложные вопросы.
2.1.3. Enthought Canopy
Данный дистрибутив предоставляет, как интерактивную среду, так и собственную среду разработки, причем вы не ограничены какой-то одной версией Python, а можете сами выбирать с какой именно версией Python вы будете работать к примеру 2.7 или 3.5. При этом вы так же имеете доступ к более чем 450 пакетам.
Весьма интересной особенностью Enthought Canopy является работа с научными и аналитическими пакетами. В вашем распоряжении появляется графический менеджер пакетов, который позволяет гибко манипулировать всеми пакетами и их зависимостями. При этом гарантируется что вы имеете доступ к самым стабильным (проверенным) версиям пакетов. Это не означает, что в других дистрибутивах не следят за включаемыми в них пакетами, но Enthought подчеркнуто гарантирует это.
Enthought Canopy способен работать с Eхcel и LabVIEW, имеет собственный сервер для совместной работы в рамках частных сетей, и имеет много других способов для интеграции в существующую инфраструктуру. Конечно за дополнительные возможности наверняка придется заплатить, но бесплатная версия прекрасно подойдет для научных и инженерных расчетов.
2.1.4. Intel® Distribution for Python
Данный дистрибутив является бесплатным и предоставляет собой высокоскоростную реализацию Python и большого количества научных пакетов. Например, в зависимости от испльзуемого процессора, производительность NumPy, SciPy и numexpr благодаря библиотеке Intel® Math Kernel Library может превосходить производительность тех же библиотек на тех же процессорах от 1,3 до нескольких тысяч раз.
2.1.5. Python(x,y)
Устанавливая Python(x,y), вы получаете очень много инструментов для создания серьезных научных приложений: от компиляторов С/С++/Fortran до средств документирования. Нельзя сказать, что данный дистрибутив является чем-то уникальным, но он определенно заслуживает внимания, особенно, пользователей Windows.
2.1.6. WinPython
Наверное, стоит особо отметить, что данный дистрибутив, все же предназначен для продвинутых научных разработчиков и одновременно продвинутых пользователей Windows. Т. е. это означает, что вы не только создаете, но и сопровождаете научное программное обеспечение и точно знаете что делаете.
2.1.7. Pyzo
Бесплатный кросплатформенный дистрибутив, о котором, весьма лестно отзываются пользователи, особенно OSX. На самом деле, на данный момент, Pyzo представляет собой не дистрибутив, а IDE, которая нацелена на интерактивность и простоту, подходящую не только ученым, но даже школьникам.
Pyzo позволяет выбрать используемый интерпретатор Python и обычно используется с miniconda или anaconda, для упрощения установки научных пакетов. Эту IDE легко установить и легко начать с ней работать. На официальном сайте, достаточно информации для новичков-разработчиков. Поэтому, в отличии от WinPython, Pyzo с увереностью можно порекомендовать тем кто только начинает создавать научное программное обеспечение.
2.1.8. Какой дистрибутив выбрать?
Если вы являетесь новичком в науке или если в вашей работе исследования очень значительно преобладают над разработкой, то я порекомендовал бы дистрибутив Anaconda. Такая рекомендация связана стем, что в образовании и исследованиях IPython, Jupyter и установленных по умолчанию пакетов более чем достаточно. Конечно, рано или поздно, вы столкнетесь с тем, что вам потребуется писать не просто скрипты, но и код, который будет использоваться повторно и очень много раз. Поэтому, здесь обязательно пригодится IDE Spyder и всевозможные инструменты для построения графических инструментов.
Ну а все остальное я бы порекомендовал тем кто имеет склонность к разработке научного софта или имеет потребность в ее создании. Причем, новичкам на этом поприще, наверняка стоит начать с Pyzo, думаю, и обучение разработке с данной IDE окажется довольно успешным. Что касается Enthought Canopy, то данный дистрибутив, наверняка больше всего подойдет, как будующим так и состоявшимся инженерам. ActivePython окажется незаменим в коммерческих организациях. А вот Python(x,y) и WinPython больше всего подойдут, как неискушенным так и профессиональным пользователям Windows.
2.1.9. Использование в коммерческих целях
В подавляющем большинстве случаев, пакеты Python относятся к ПО с открытым исходным кодом, но если вы собираетесь использовать какие-то пакеты для извлечения коммерческой выгоды, то обязательно ознакомьтесь с их лицензией. Пользователям ActivePython и платных версий дистрибутивов Anaconda и Enthought Canopy в случае возникновения проблем, связанных с лицензиями на пакеты, предоставляются разнообразные компенсации.
2.2. Установка с помощью pip
Если в вашей системе установлен Python и pip, то установить NumPy можно с помощью команды:
С помощью этой же команды можно установить любой пакет из стека SciPy:
Или сразу весь стек SciPy:
2.3. Установка через менеджер пакетов Linux
Ubuntu и Debian
Пользователи Linux могут установить NumPy и весь стек пакетов SciPy из репозиториев. Однако, может оказаться, что установленный пакет окажется более старой или вовсе не подходящей версией. К тому же установка окажется общесистемной.
Или весь стек целиком
Fedora 22 и выше
2.4. Установка через менеджер пакетов MAC
У MAC нет предустановленного менеджера пакетов и если в вашей системе он отсутствует, то рекомендуется установить Macports. Для установки NumPy и всего стека пакетов SciPy выполните следующую команду:
В данном примере производится установка для Python версии 3.4. Если вы используете другую версию Python, допустим 3.5 то просто замените py34 на py35.
Если вы используете мнеджер Homebrew, то просто выполните:
2.5. Windows
Если по некоторым причинам в Windows вам не подходит установка с помощью pip, то ознакомьтесь с проектом Christoph Gohlke, который предоставляет возможность использовать двоичные файлы (32 и 64 бит) созданных для официального дистрибутива Python на языке CPython. Однако, лучшим вариантом все-таки остается pip.
2.6. Сборка NumPy из исходных компонентов
Создавать Пакеты из исходных текстов кода Python относительно легко, но NumPy требует подключения компилятора Fortran и компиляции кода C. Поэтому, если возникла такая необходимость, то лучше обратиться к официальной документации.