Двумерный массив в python и обработка элементов массива

На уроке рассмотрен алгоритм работы с двумерными массивами а python, приведены примеры инициализации и обработки элементов матрицы

Обработка элементов двумерного массива

Нумерация элементов двумерного массива, как и элементов одномерного массива, начинается с нуля.
Т.е. matrix[2][3] — это элемент третьей строки четвертого столбца.

Пример обработки элементов матрицы:
Найти произведение элементов двумерного массива.

✍ Решение: 

12345 p = 1 for i in range(N): for j in range(M): p *= matrix[i][j] print (p)

p = 1 for i in range(N): for j in range(M): p *= matrix[i][j] print (p)

Пример:
Найти сумму элементов двумерного массива.

✍ Решение: 

Более подходящий вариант для Python:

1234 s = 0 for row in matrix: s += sum(row) print (s)

s = 0 for row in matrix: s += sum(row) print (s)

Для поиска суммы существует стандартная функция sum.

Задание Python 8_0:

Получены значения температуры воздуха за 4 дня с трех метеостанций, расположенных в разных регионах страны:

Номер станции 1-й день 2-й день 3-й день 4-й день
1 -8 -14 -19 -18
2 25 28 26 20
3 11 18 20 25

Т.е. запись показаний в двумерном массиве выглядела бы так:

t[0][0]=-8 t[0][1]=-14 t[0][2]=-19 t[0][3]=-18
t[1][0]=25 t[1][1]=28 t[1][2]=26 t[1][3]=20
t[2][0]=11 t[2][1]=18 t[2][2]=20 t[2][3]=25
  1. Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
  2. Распечатать показания термометров всех метеостанций за 2-й день.
  3. Определить среднюю температуру на 3-й метеостанции.
  4. Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла.

Задание Python 8_1:
Написать программу поиска минимального и максимального элементов матрицы и их индексов.

Задание Python 8_2:
Написать программу, выводящую на экран строку матрицы, сумма элементов которой максимальна.

Для обработки элементов квадратной матрицы (размером N x N):Для элементов главной диагонали достаточно использовать один цикл:

for i in range(N): # работаем с matrix[i][i]

for i in range(N): # работаем с matrix[i][i]

Для элементов побочной диагонали:

for i in range(N): # работаем с matrix[i][N-1-i]

for i in range(N): # работаем с matrix[i][N-1-i]

Пример:Переставить 2-й и 4-й столбцы матрицы. Использовать два способа.

✍ Решение: 

  1. for i in range(N): c = A[i][2] A[i][2] = A[i][4] A[i][4] = c

    for i in range(N): c = A[i][2] A[i][2] = A[i][4] A[i][4] = c

  2. for i in range(N): A[i][2], A[i][4] = A[i][4], A[i][2]

    for i in range(N): A[i][2], A[i][4] = A[i][4], A[i][2]

Задание Python 8_3:
Составить программу, позволяющую с помощью датчика случайных чисел сформировать матрицу размерностью N. Определить:

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

Объявление двумерного массива

Синтаксис:

array-name = [ [d1, d2, …. dn], [e1, e2, …. en] ]

Пример:

array_input = [ [10,12,14] ,[0,1,2] ]print(array_input[0]) # printing elements of row 0print(array_input[1]) # printing elements of row 1

Вывод:

вывод 2D массива

Вход в двумерный массив предоставляется в виде строк и столбцов.

Пример:

size = int(input()) array_input = []for x in range(size): array_input.append([int(y) for y in input().split()])print(array_input)

Вывод:

ввод и вывод 2D массива

Двумерный массив в Python

Давайте посмотрим на элементы подобной конструкции массива. Обратите внимание, что они располагаются в столбцах и строках, которые заполняются следующим образом:

a1 = []for j in range(5): a2 = [] for i in range(5): a2.append(0) a1.append(a2)

Мы можем увидеть, что главная идея реализации двумерного набора данных — создание нескольких списков a2 внутри одного большого списка a1. Далее, посредством 2-х циклов for осуществляется автозаполнение нулями матрицы, имеющей размерность 5×5. И эту задачу успешно решают методы append и range — первый добавляет в список новый элемент (0), второй устанавливает его величину (5).

Следует сказать, что для каждого нового for-цикла применяется своя временная переменная, которая выполняет представление текущего элемента внутренних (i) или внешнего (j) списков. Чтобы обратиться к требуемой ячейке многомерного списка, надо указать её координаты в квадратных скобках, ориентируясь при этом на строки и столбцы: a1[1][2].

Создание и заполнение

Перед тем как добавить (создать) новый массив в Python 3, необходимо произвести импорт библиотеки, отвечающей за работу с таким объектом. Для этого потребуется добавить строку from array import * в файл программы. Как уже было сказано ранее, массивы ориентированы на взаимодействие с одним постоянным типом данных, вследствие чего все их ячейки имеют одинаковый размер. Воспользовавшись функцией array, можно создать новый набор данных. В следующем примере демонстрируется заполнение массива Python — запись целых чисел при помощи метода, предложенного выше.

from array import *data = array(‘i’, [2, 5, 4, 0, 8])

Как можно заметить, функция array принимает два аргумента, первым из которых становится тип создаваемого массива, а на месте второго стоит начальный список его значений. В данном случае i представляет собой целое знаковое число, занимающее 2 байта памяти. Вместо него можно использовать и другие примитивы, такие как 1-байтовый символ (c) или 4-байтовое число с плавающей точкой (f).

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

Обратиться к элементу можно при помощи квадратных скобок, к примеру, data[2].

Обзор учебника

Этот урок разделен на 4 части; они есть:

  1. Из списка в массивы
  2. Индексирование массива
  3. Нарезка массива
  4. Изменение формы массива

1. Из списка в массивы

В общем, я рекомендую загружать ваши данные из файла с помощью функций Pandas или даже NumPy.

Для примера, смотрите пост:

  • Как загрузить данные машинного обучения в Python

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

Давайте посмотрим на преобразование ваших данных в списках в массивы NumPy.

Одномерный список в массив

Вы можете загрузить свои данные или сгенерировать свои данные и иметь доступ к ним в виде списка.

Вы можете преобразовать одномерный список данных в массив, вызвав функцию array () NumPy.

# one dimensional examplefrom numpy import array# list of datadata = [11, 22, 33, 44, 55]# array of datadata = array(data)print(data)print(type(data))

Выполнение примера преобразует одномерный список в массив NumPy.

[11 22 33 44 55]<class ‘numpy.ndarray’>

Двумерный список списков для массива

В машинном обучении более вероятно, что у вас будут двумерные данные.

Это таблица данных, в которой каждая строка представляет новое наблюдение, а каждый столбец — новую особенность.

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

Вы можете преобразовать свой список списков в массив NumPy так же, как описано выше, вызвав функцию array ().

# two dimensional examplefrom numpy import array# list of datadata = [[11, 22], [33, 44], [55, 66]]# array of datadata = array(data)print(data)print(type(data))

Выполнение примера показывает, что данные успешно преобразованы.

[[11 22] [33 44] [55 66]]<class ‘numpy.ndarray’>

Операции над двумерным массивом

Собственно, никаких новых операций над двумерными массивами нет. Вы всегда работаете или с внешним массивом, или с каким-то внутренним массивом, и можете использовать все операции, которые знаете для одномерных массивов. Например, len(z) — это длина «внешнего» массива (в примере выше получается 3, т.к. z содержит три элемента, и не важно, что каждый из них тоже массив), а len(z[2]) — длина внутреннего массива на позиции 2 (т.е. 2 в примере выше). Для массива x выше (того, у которого каждый подмассив имеет свою длину) получим len(x)==5, и, например, len(x[3])==0.

Аналогично работают все остальные операции. z.append([1,2]) приписывает к «внешнему» массиву еще один «внутренний» массив, а z[2].append(3) приписывает число 3 к тому «внутреннему» массиву, который находится на позиции 2. Далее, z.pop() удаляет последний «внутренний» из «внешнего» массива, а z[2].pop() удаляет последний элемент из «внутреннего» массива на позиции 2. Аналогично работают z[1:2] и z[1][0:1] и т.д. — все операции, которые я приводил выше.

Нарезка

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

Синтаксис:

<slice_array> = <array>[start:stop]

array1 = [[1,2,3],[4,5,6,7]]#python array slicearray2 = array1[1:3] #index 1 to 2print(array2)array2 = array1[:1] #index 0 to 1print(array2)

Вывод:

применение slice

Рекомендации

  • Массивы Python
  • Python 2D массивы
  • Документация для массивов Python
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: