Библиотека сайта rus-linux.net
Использование NumPy для научных расчетов в Linux
Оригинал: How to use NumPy for scientific computing in LinuxАвтор: Joshua Reed
Дата публикации: 3 ноября 2014 года
Перевод: А. Кривошей
Дата перевода: декабрь 2014 г.
Серьезные научные расчеты в Linux можно выполнять с помощью NumPy - научного пакета на базе Python с открытым исходным кодом, выпущенным под лицензией BSD, который представляет собой бесплатную, но мощную альтернативу проприетарным пакетам (таким как MATLAB). Многочисленные встроенные инструменты для анализа данных, обширная документация и детальные примеры делают NumPy идеальным пакетом для использования в научных вычислительных приложениях. В этом руководстве мы рассмотрим некоторые возможности NumPy для того, чтобы продемонстрировать ее мощь и простоту использования.
Возможности
NumPy предлагает обширную функциональность, которая включает (но не ограничивается!):
- Работа с многомерными массивами;
- Преобразование списков и кортежей Python в массивы NumPy (и наоборот);
- Импорт данных из текстовых файлов;
- Математические функции (арифметические, тригонометрические, экспоненциальные, логарифмические...);
- Распределения вероятностей;
- Статистические параметры (среднее, стандартное отклонение, гистограммы...);
- Преобразования Фурье;
- Линейная алгебра;
- Матрицы;
- Запись данных в текстовые файлы;
- Интеграция в существующие программы и скрипты на Python;
Преимущество NumPy над другими пакетами для научных вычислений с подобными лицензиями (такими как GNU Octave), заключается в том, что вы можете создавать приложения на Python, использующие возможности NumPy и всех других пакетов Python, обеспечивая вас огромным ассортиментом инструментов для решения самых разных задач. Кроме того, синтаксис NumPy унаследован от Python, что позволяет отказаться от синтаксиса в стиле MATLAB (используемого в GNU Octave) и применять свои навыки программирования на Python.
Установка
Для установки NumPy в Linux используйте следующие команды:
В Debian или Ubuntu:
$ sudo apt-get install python-numpy
В Fedora или CentOS:
$ sudo yum install numpy
У вас уже должен быть предварительно установлен Python (как правило, он установлен в системе по умолчанию).
Примеры использования NumPy
Ниже мы рассмотрим несколько примеров, демонстрирующих использование NumPy:
- Базовые операции с массивами;
- Импорт данных, разделенных запятыми, из текстового файла;
- Разбиение выборки равномерно распределенных данных.
В этих примерах мы будем использовать NumPy в командной строке интерактивной оболочки Python. Запустите ее с помощью команды "python" и затем импортируйте библиотеку numpy:
$ python Python 2.7.3 Type "help", "copyright", "credits" or "license" for more information. >>> import numpy as np
Пример 1: операции с массивами
Определим объект массива NumPy под именем "A", имеющий три строки, каждая из которых содержит три 32-битных целых числа. Выведем содержимое массива, введя его имя.
>>> A = np.array([[2, 2, 2], [4, 4, 4], [6, 6, 6]], np.int32) >>> A array([[2, 2, 2], [4, 4, 4], [6, 6, 6]], dtype=int32)
Определим второй объект массива NumPy под именем "B", имеющий три строки, каждая из которых содержит три 32-битных целых числа.
>>> B = np.array([[1, 1, 1], [5, 5, 5], [10, 10, 10]], np.int32) >>> B array([[ 1, 1, 1], [ 5, 5, 5], [10, 10, 10]], dtype=int32)
Определим третий массив как сумму двух предыдущих:
>>> C = A + B >>> C array([[ 3, 3, 3], [ 9, 9, 9], [16, 16, 16]], dtype=int32)
Найдем, какие из элементов третьего массива больше 10:
>>> C.__gt__(10) array([[False, False, False], [False, False, False], [ True, True, True]], dtype=bool)
Пример 2: импорт разделенных запятой данных из текстового файла
Предположим, у нас есть файл data.txt со следующими данными:
1.0,2.0,3.0,4.0,5.0 600.0,700.0,800.0,900.0,1000.0
Вы можете вручную создать массив NumPy с этими данными, но при этом вам нужно будет самому ввести каждое значение. При работе с большими массивами данных такое решение не подходит. Данные, разделенные какими-либо символами можно без труда импортировать в массив NumPy.
Определим массив "D", содержащий данные из файла data.txt и укажем, что данные импортируются в виде 64-битных чисел с плавающей точкой, а разделителем служат запятые:
>>> D = np.loadtxt('data.txt', dtype=np.float64, delimiter=',') >>> D array([[ 1., 2., 3., 4., 5.], [ 600., 700., 800., 900., 1000.]])
Пример 3: разбиение выборки равномерно распределенных данных
Предположим, вы хотите сгенерировать 100 случайных чисел в диапазоне от 0.0 до 1.0, используя равномерное распределение вероятности (то есть любое значение в этом диапазоне появляется с одинаковой вероятностью). Это легко сделать с помощью приведенной ниже команды. Полученные числа будут храниться в массиве "Е".
>>> E = np.random.uniform(0.0, 1.0, 100) >>> E array([ 0.90319756, 0.39696831, 0.87253663, 0.2541832 , 0.09188716, 0.41019978, 0.87418001, 0.13551479, 0.60185788, 0.8717379 , 0.91012149, 0.9781284 , 0.97365995, 0.95618329, 0.25079489, 0.94314188, 0.92708129, 0.64377239, 0.27262929, 0.63310245, 0.7315558 , 0.53799042, 0.04425291, 0.1377755 , 0.69068289, 0.9929916 , 0.56488252, 0.25588388, 0.81735705, 0.98430142, 0.38541288, 0.81925846, 0.23941429, 0.9996938 , 0.49898967, 0.87731326, 0.41729317, 0.08407739, 0.09734557, 0.23217088, 0.29291853, 0.09453821, 0.05676644, 0.97170175, 0.25987992, 0.11203194, 0.68670969, 0.77228168, 0.85391461, 0.96315244, 0.34276206, 0.8918815 , 0.93095419, 0.33098585, 0.71910359, 0.73351498, 0.20238829, 0.75232483, 0.12985561, 0.13185072, 0.99842567, 0.78278125, 0.1550288 , 0.03083502, 0.34190622, 0.1755099 , 0.67803282, 0.31715532, 0.29491133, 0.35878659, 0.46047523, 0.27475024, 0.24985922, 0.5595999 , 0.14831301, 0.20137857, 0.79864609, 0.81361761, 0.22554692, 0.84947817, 0.48316828, 0.8848909 , 0.27639724, 0.02182878, 0.95491984, 0.31427821, 0.6760356 , 0.27305986, 0.73480237, 0.9581474 , 0.5614434 , 0.12382754, 0.42856939, 0.69581633, 0.39598608, 0.86023031, 0.59549305, 0.41717616, 0.70233037, 0.66019342])
Мы можем протестировать эти данные, используя инструмент histogram. Для полученных данных мы можем ожидать, что примерно 50% значений будут в диапазоне от 0.0 до 0.5, а оставшиеся 50% - в диапазоне от 0.5 до 1.0 (при условии, что мы задаем разбиение на два интервала, ограниченные нижним и верхним пределами 0.0 и 1.0 соответственно).
>>> np.histogram(E, bins=2, range=(0.0, 1.0)) (array([49, 51]), array([ 0. , 0.5, 1. ]))
Утилита histogram подтвердила наши ожидания, показав, что 49 из 100 чисел (49%) лежат в первом интервале (от 0.0 до 1.0) и 51 из 100 (51%) - во втором интервале (от 0.5 до 1.0).
Заключение
В этом руководстве мы рассмотрели некоторые возможности пакета для научных вычислений NumPy и продемонстрировали на примерах простоту его использования. Документацию и дополнительные примеры можно найти на официальном сайте.