Массив в "Питоне" (Python)

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

Массив в "Питоне"

Одномерный массив представляет собой список элементов.

Массивы в Пайтон

Значения списка указываются между квадратных скобок [], перечисляются через запятую. Любой элемент вызывается по индексу. Элементам могут присваиваться новые значения.

Так выглядит пустой список:

  • a = []

Массив строк в "Питоне" выглядит так:

  • Prime = ['string1', 'string2', 'string3']
  • Prime[1] = 'string2'; //true

Функция len() возвращает количество элементов внутри списка.

  • len(Prime) == 4; // true

Для перечисления элементов массива используется цикл for. Его отличие от Pascal в том, что он перебирает именно элементы, а не их индексы.

  • for elem in [1, 4, 67]

Для создания цикла используется генератор заполнения списков. Записывается в виде [значение массива for имя переменной in количество элементов];

Двумерный массив в "Питоне" создается с помощью вложенных генераторов. Выглядеть это должно примерно следующим образом:

  • [[0 for j in range(m)] for i in range(n)]

Создание массива в NumPy

Для создания и модификации массивов в "Питоне" используется библиотека NumPy.

ЯП Пайтон

Она поддерживает многомерный массив и матрицы, обладает большим набором пакетов для решения математических задач. А также обеспечивает работу с однородными многомерными массивами и матрицами. Чтобы получить возможность пользоваться функциями этого пакета, его необходимо импортировать.

  • import numpy as np

Один из наиболее простых способов, как задать массив в "Питоне" - воспользоваться функцией array(). Она создает объект типа ndarray.

  • array = np.array(/* множество элементов */)

Теперь array обладает типом ndarray. Это можно проверить функцией array.type(). Она приняла в качестве аргумента имя созданного массива. Вернется ответ - <class 'numpy.ndarray'>.

Чтобы переопределить тип, нужно использовать dtype=np.complex на этапе создания.

  • array2 = np.array([ /*элементы*/, dtype=np.complex)

Если нужно задать массив, но его элементы на этом этапе неизвестны, он заполняется нулями функцией zeros(). Можно создать массив из единиц функцией ones(). В качестве аргументов принимается количество вложенных массивов и количество элементов внутри.

  • np.zeros(2, 2, 2)

Создаст два массива внутри, которые содержат по 2 элемента.

  • array([
  • [[0, 0]]
  • [[0, 0]]]
  • )

Чтобы вывести массив на экран, используется функция print(). Если массив слишком большой для печати, NumPy скрывает центральную часть и выводит только крайние значения.

Чтобы увидеть весь массив, применяется функция set_printoptions(). По умолчанию выводятся только первые 1000 элементов. Это значение указывается как аргумент с ключевым словом threshold.

Базовые операции NumPy

Любые действия над элементами массива в "Питоне" предполагают создание нового массива.

Библиотке NumPy

Созданный массив содержит элементы, полученные в результате выполнения некоторых действий над ними. Массивы могут взаимодействовать только в том случае, когда имеют одинаковый размер. Например:

  • array1 = np.array([[1, 2, 3], [1, 2, 3]])
  • array2 = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])

При выполнении array1 + array2 компилятор выведет ошибку, потому что размер первого массива - 2, а второго - 3.

  • array1 = np.array([1, 2, 5, 7])
  • array2 = arange([1, 5, 1])

Array1 + array2 вернет массив с элементами 2, 4, 8, 11. Ошибка не возникнет, потому что размер обоих одинаковый.

Вместо ручного сложения можно использовать функцию, которая входит в класс ndarray sum().

  • np.array(array1 + array1) == array1 + array2

Класс ndarray предоставляет большую библиотеку методов для математических операций. Они задаются в виде np.имя метода (имя переменной).

Форма

Размер массива в "Питоне" определяет форму. Для проверки текущей формы используется метод shape().

Одномерные, двумерный и трехмерный массив

Массив с двумя и тремя элементами имеет форму (2, 2, 3). Она изменится, если в shape() указать аргументы. В качестве первого будет использовано количество подмассивов, второго - размерность каждого подмассива. Ту же самую операцию выполняет функция reshape(). Ее параметры определяют число строк и столбцов.

Существуют методы для манипуляций формой. Например, ravel() из многомерного массива делает одномерный, выстраивая внутренние значения по возрастанию последовательно. Функция transpose() меняет местами строки и столбцы многомерного массива.

Срезы

Часто приходится работать не с целым массивом, а только с некоторыми его элементами. Для этих целей в "Пайтоне" существует метод "Срез" (слайс). Он пришел на замену перебору элементов циклом for.

Срезы в Пайтон

Метод открывает широкие возможности для получения копии массива в "Питоне". Все манипуляции осуществляются в таком виде [start:stop:step]. Здесь значение start обозначает индекс элемента, от которого начинается отсчет, значение stop - последний элемент, размер шага - количество пропускаемых элементов при каждой итерации. По умолчанию start равняется нулю, то есть отсчет начинается от нулевого элемента списка, stop равняется индексу последнего элемента в списке, шаг - равен единице, то есть перебирает каждый поочередно. Если передать в функцию без аргументов, список копируется полностью от начала до конца.

Например, у нас есть массив:

  • mas = [1, 2, 3, 4]

Чтобы его скопировать, используем mas[:]. Функция вернет последовательность элементов [1, 2, 3, 4]. Если аргументом будет отрицательное значение, например -3, функция вернет элементы с индексами от третьего до последнего.

  • mas[-3]; //[4]

После двойного двоеточия указывается шаг элементов, копируемых в массиве. Например, mas[::2] вернет массив [1, 3]. Если указано отрицательное значение, например, [::-2] отсчет будет начинаться с конца, и получим [3, 1].

Методом среза можно гибко работать с вложенными списками. Для двумерного массива в "Питоне" [:, 2] означает, что вернется каждый третий элемент всех массивов. Если указать [:2] - вернутся первые два.

Копия

Получение копии осуществляется при помощи слайсов, о которых написано выше. В Python копирование через присваивание не работает, потому что таким образом передаются не сами объекты, а только ссылки. Это означает, что создав массив со значениями np.arange(10) и присвоив array2 = array1, получим два объекта с одинаковыми значениями, но разными именами, в данном случае array1 и array2. Изменение формы одного из них повлияет на второй. Функция array1.shape(3, 4) изменит форму array2.

  • array1.shape() == (3, 4);//true
  • array2.shape() == (3, 4);//true

Функция view() создает разные объекты с одинаковыми данными. Например, у нас есть некий массив array, к которому мы применяем функцию view()

  • array.view()

Полученное значение присваиваем второму массиву array2 и видим, что это разные объекты, но у них одинаковые данные. Проверяем:

  • array2 is array1; //false

Если меняем форму одного из массивов, оно не меняется и во втором.

  • array1.shape(2, 6)
  • array1 == array2; // true

Объединение, разбиение

Массивы между собой могут объединяться. Это осуществляется вдоль осей или строк. Функция hstack() объединяет их по строкам, а vstack() - по столбцам.

С помощью функции column_stack() можно объединить массивы в аргументах в один одномерный. Аналогично column_stack() работает row_stack(), но объединяет строки, а не столбцы. Чтобы разбить массив по горизонтали, применяется функция hsplit(), а vsplit() - по вертикали.

Статья закончилась. Вопросы остались?
Комментариев 5
Подписаться
Я хочу получать
Правила публикации
0
Что означает, если shape вернул размер (1500,), т.е. без второго аргумента
Копировать ссылку
Означает, что это одномерный массив
Копировать ссылку
понимаю
Копировать ссылку
Статья не полная. Совершенно не понятно как работать с числовыми массивами.
Копировать ссылку
а как его считать масив
Копировать ссылку
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.