Numpy На Python. Часть 1



Предисловие переводчика

Добрый день, Хабр.

Я запускаю серию статей, которые представляют собой переводы небольшого мана от numpy, ссылка .

Наслаждайся чтением.

Часть 2 Часть 3 Часть 4

Введение

NumPy — это модуль с открытым исходным кодом для Python, который обеспечивает общие математические и числовые операции в виде предварительно скомпилированных быстрых функций.

Они объединены в пакеты высокого уровня.

Они предоставляют функциональность, которую можно сравнить с функциональностью MatLab. NumPy (Numeric Python) предоставляет базовые методы для работы с большими массивами и матрицами.

SciPy (Scientific Python) расширяет функциональность numpy огромной коллекцией полезных алгоритмов, таких как минимизация, преобразование Фурье, регрессия и другие прикладные математические методы.



Монтаж

Если у вас есть Python(x, y) ( Примечание переводчика: Python(x, y) — это дистрибутив бесплатного научного и инженерного программного обеспечения для численных расчетов, анализа и визуализации данных на основе языка программирования Python и большого количества модулей (библиотек)) на платформе Windows, тогда вы готовы приступить к работе.

.

Если нет, то после установки Python вам необходимо самостоятельно установить пакеты, сначала NumPy, затем SciPy. Возможна установка Здесь .

Следите за установкой на странице, там все предельно понятно.



Некоторая дополнительная информация

Сообщество NumPy и SciPy поддерживает онлайн-руководство, включая руководства и учебные пособия, здесь: docs.scipy.org/doc. Импорт модуля numpy Существует несколько путей импорта.

Стандартный метод — использовать простое выражение:

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

>>> import numpy

Однако при большом количестве вызовов функций numpy становится утомительно писать numpy.X снова и снова.

Гораздо проще сделать это следующим образом:

>>> import numpy as np

Это выражение позволяет нам получать доступ к объектам numpy, используя np.X вместо numpy.X. Вы также можете импортировать numpy непосредственно в используемое вами пространство имен, поэтому вам вообще не нужно использовать пунктирные функции, а вызывать их напрямую:

>>> from numpy import *

Однако этот вариант не приветствуется в программировании на Python, поскольку он удаляет некоторые полезные структуры, предоставляемые модулем.

В оставшейся части этого руководства мы будем использовать второй вариант импорта (импортировать numpy как np).



Массивы

Основная особенность numpy — это объект массива.

Массивы похожи на списки в Python, за исключением того, что элементы массива должны иметь один и тот же тип данных, например float и int. С помощью массивов можно выполнять числовые операции с большими объемами информации во много раз быстрее, а главное гораздо эффективнее, чем со списками.

Создание массива из списка:

a = np.array([1, 4, 5, 8], float) >>> a array([ 1., 4., 5., 8.]) >>> type(a) <class 'numpy.ndarray'>

Здесь функция массива принимает два аргумента: список для преобразования в массив и тип каждого элемента.

Ко всем элементам можно получить доступ и манипулировать ими так же, как и с обычными списками:

>>> a[:2] array([ 1., 4.]) >>> a[3] 8.0 >>> a[0] = 5. >>> a array([ 5., 4., 5., 8.])

Массивы также могут быть многомерными.

В отличие от списков, в круглых скобках можно использовать запятые.

Вот пример двумерного массива (матрицы):

>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> a array([[ 1., 2., 3.], [ 4., 5., 6.]]) >>> a[0,0] 1.0 >>> a[0,1] 2.0

Срез массива работает с многомерными массивами так же, как и с одномерными массивами, применяя каждый срез в качестве фильтра для указанного измерения.

Используйте «:» в измерении, чтобы указать использование всех элементов этого измерения:

>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> a[1,:] array([ 4., 5., 6.]) >>> a[:,2] array([ 3., 6.]) >>> a[-1:, -2:] array([[ 5., 6.]])

Метод shape возвращает количество строк и столбцов в матрице:

>>> a.shape (2, 3)

Метод dtype возвращает тип переменных, хранящихся в массиве:

>>> a.dtype dtype('float64')

Здесь float64 — это числовой тип данных в numpy, который используется для хранения действительных чисел двойной точности.

Точно так же, как float в Python. Метод len возвращает длину первого измерения (оси):

a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> len(a) 2

Метод in используется для проверки наличия элемента в массиве:

>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> 2 in a True >>> 0 in a False

Массивы можно переформатировать с помощью метода, определяющего новый многомерный массив.

Следуя следующему примеру, мы переформатируем одномерный массив из десяти элементов в двумерный массив, состоящий из пяти строк и двух столбцов:

>>> a = np.array(range(10), float) >>> a array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) >>> a = a.reshape((5, 2)) >>> a array([[ 0., 1.], [ 2., 3.], [ 4., 5.], [ 6., 7.], [ 8., 9.]]) >>> a.shape (5, 2)

Обратите внимание, что метод reshape создает новый массив, а не изменяет исходный.

Имейте в виду, что привязка имен в Python также работает с массивами.

Метод копирования используется для создания копии существующего массива в памяти:

>>> a = np.array([1, 2, 3], float) >>> b = a >>> c = a.copy() >>> a[0] = 0 >>> a array([0., 2., 3.]) >>> b array([0., 2., 3.]) >>> c array([1., 2., 3.])

Списки также можно создавать из массивов:

>>> a = np.array([1, 2, 3], float) >>> a.tolist() [1.0, 2.0, 3.0] >>> list(a) [1.0, 2.0, 3.0]

Вы также можете преобразовать массив в двоичную строку (то есть в нечитаемую человеком форму).

Используйте для этого метод tostring. Метод fromstring работает в обратном преобразовании.

Эти операции иногда полезны для хранения больших объемов данных в файлах, которые можно будет прочитать в будущем.



>>> a = array([1, 2, 3], float) >>> s = a.tostring() >>> s '\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x08@' >>> np.fromstring(s) array([ 1., 2., 3.])

Заполнение массива одинаковым значением.



>>> a = array([1, 2, 3], float) >>> a array([ 1., 2., 3.]) >>> a.fill(0) >>> a array([ 0., 0., 0.])

Транспонирование массивов также возможно, создавая новый массив:

>>> a = np.array(range(6), float).

reshape((2, 3)) >>> a array([[ 0., 1., 2.], [ 3., 4., 5.]]) >>> a.transpose() array([[ 0., 3.], [ 1., 4.], [ 2., 5.]])

Многомерный массив можно преобразовать в одномерный с помощью метода Flatten:

>>> a = np.array([[1, 2, 3], [4, 5, 6]], float) >>> a array([[ 1., 2., 3.], [ 4., 5., 6.]]) >>> a.flatten() array([ 1., 2., 3., 4., 5., 6.])

Два или более массива можно объединить с помощью метода concatenate:

>>> a = np.array([1,2], float) >>> b = np.array([3,4,5,6], float) >>> c = np.array([7,8,9], float) >>> np.concatenate((a, b, c)) array([1., 2., 3., 4., 5., 6., 7., 8., 9.])

Если массив не одномерный, можно указать ось, по которой будет происходить соединение.

По умолчанию (без указания значения оси) соединение будет происходить по первому измерению:

>>> a = np.array([[1, 2], [3, 4]], float) >>> b = np.array([[5, 6], [7,8]], float) >>> np.concatenate((a,b)) array([[ 1., 2.], [ 3., 4.], [ 5., 6.], [ 7., 8.]]) >>> np.concatenate((a,b), axis=0) array([[ 1., 2.], [ 3., 4.], [ 5., 6.], [ 7., 8.]]) >>> np.concatenate((a,b), axis=1) array([[ 1., 2., 5., 6.], [ 3., 4., 7., 8.]])

Наконец, размер массива можно увеличить, используя константу newaxis в квадратных скобках:

>>> a = np.array([1, 2, 3], float) >>> a array([1., 2., 3.]) >>> a[:,np.newaxis] array([[ 1.], [ 2.], [ 3.]]) >>> a[:,np.newaxis].

shape (3,1) >>> b[np.newaxis,:] array([[ 1., 2., 3.]]) >>> b[np.newaxis,:].

shape (1,3)

Обратите внимание, что каждый массив здесь двумерный; созданный с использованием newaxis, имеет размерность один.

Метод newaxis подходит для удобного создания массивов правильной размерности в векторной и матричной математике.

На этом закончилась первая часть перевода.

Спасибо за внимание.

Теги: #перевод с английского #python3 #Numpy #Массивы #python

Вместе с данным постом часто просматривают: