Опубликован: 05.04.2015 | Уровень: для всех | Доступ: платный | ВУЗ: Компания ALT Linux
Лекция 2:

Основные алгоритмы и их реализация на Python

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >

2.4 Обработка двумерных массивов (матриц)

Двумерные массивы являются аналогами матриц и имеют "прямоугольную" (табличную) структуру. Описываются массивы так же, как одномерные. Разница состоит в том, что у элемента двумерного массива две координаты (два индекса) — номер строки и номер столбца, в которых находится элемент.

Ввод массива осуществляется построчно при помощи двух циклов. Пусть M — количество столбцов, N — количество строк. Элементы массива обозначим как mas[i, j], первый индекс — номер строки, второй — номер столбца.

ввод M,N
нц для i от 1 до N
	нц для j от 1 до M
		ввод mas[i, j]
	кц
кц

Вывод массива на экран осуществляется при помощи аналогичных циклов.

нц для i от 1 до N
	нц для j от 1 до M
		вывод mas[i, j]
	кц
	вывод
кц

Здесь "пустой" оператор вывода обеспечивает переход на новую строку.

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

Однако Python предоставляет более удобный инструмент создания и преобразования многомерных массивов — библиотеку numpy (Numeric Python).

Создание двумерного массива в Python может выглядеть так:

# -*- coding: utf-8 -*-

#

import numpy

n=input('Количество строк: ')

m=input('Количество столбцов: ')

# Создаём "нулевую" матрицу

a=numpy.zeros([n-1,m-1])

# Заполняем матрицу

for i in range(n-1) :

    for j in range(m-1) :

        print'Элемент матрицы[',i,'][',j,']'

        a[i, j]=input('Введите элемент: ')

#

Сначала с помощью функции (метода) numpy.zeros() создаётся двумерный массив (матрица), заполненный нулями, а потом вместо нулей подставляются реальные значения. Индексы элементов, так же как в строках, кортежах и списках, начинаются с 0 (первый — верхний левый — элемент матрицы в Python имеет индекс [0,0]). Оператор print выводит индексы очередного элемента матрицы, который нужно ввести.

Задача 1. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Найти среднее арифметическое элементов массива.

Постановка задачи:

Дано:

  • n — количество строк в массиве;
  • m — количество столбцов в массиве;
  • A[i,j] — элемент массива;
  • i,j — индексы элемента массива.

Найти:

  • S — сумма элементов массива (сумма всех A[i,j] при всех i и j)
  • K — количество элементов в массиве (K=m * n)
  • C — среднее арифметическое элементов массива (C=S/K)
Блок-схема алгоритма вычисления среднего значения матрицы

Рис. 2.15. Блок-схема алгоритма вычисления среднего значения матрицы

Блок-схема алгоритма решения показана на рис. 2.15.

Текст программы на "псевдоязыке":

ввод n,m
S=0
нц для i от 1 до n
	нц для j от 1 до m
		ввод A[i, j]
		S=S+A[i, j]
	кц
кц
K=n*m
C=S/K
вывод C

Текст программы на Python:

# -*- coding: utf-8 -*-

#

import numpy

n=input('Количество строк: ')

m=input('Количество столбцов: ')

S=0.0

# Создаём нулевую матрицу

a=numpy.zeros([n-1,m-1])

# Заполняем матрицу

for i in range(n-1) :

    for j in range(m-1) :

        print 'Элемент матрицы [',i,'][',j,']'

        a[i, j]=input('Введите элемент: ')

        S=S+a[i, j]

#

K=n*m

C=S/K

print 'Среднее значение по строкам:',C

2.4.1 Задачи для самостоятельного решения

  1. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Найти наибольший элемент столбца матрицы A, для которого сумма абсолютных значений элементов максимальна.
  2. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Найти наибольшее значение среди средних значений для каждой строки матрицы.
  3. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Найти наименьший элемент столбца матрицы A, для которого сумма абсолютных значений элементов максимальна.
  4. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Найти наименьшее значение среди средних значений для каждой строки матрицы.
  5. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Определить средние значения по всем строкам и столбцам матрицы. Результат оформить в виде матрицы из N +1 строк и M +1 столбцов.
  6. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Найти сумму элементов всей матрицы. Определить, какую долю в этой сумме составляет сумма элементов каждого столбца. Результат оформить в виде матрицы из N + 1 строк и M столбцов.
  7. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Найти сумму элементов всей матрицы. Определить, какую долю в этой сумме составляет сумма элементов каждой строки. Результат оформить в виде матрицы из N строк и M+1 столбцов.
  8. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Определить, сколько отрицательных элементов содержится в каждом столбце и в каждой строке матрицы. Результат оформить в виде матрицы из N + 1 строк и M + 1 столбцов.
  9. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Определить, сколько нулевых элементов содержится в верхних L строках матрицы и в левых К столбцах матрицы.
  10. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Перемножить элементы каждого столбца матрицы с соответствующими элементами K-го столбца.
  11. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Просуммировать элементы каждой строки матрицы с соответствующими элементами L-й строки.
  12. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Разделить элементы каждой строки на элемент этой строки с наибольшим значением.
  13. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Разделить элементы каждого столбца матрицы на элемент этого столбца с наибольшим значением.
  14. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Разделить элементы матрицы на элемент матрицы с наибольшим значением.
  15. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Все элементы имеют целый тип. Дано целое число H. Определить, какие столбцы имеют хотя бы одно такое число, а какие не имеют.
  16. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Исключить из матрицы строку с номером L. Сомкнуть строки матрицы.
  17. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Добавить к матрице строку и вставить ее под номером L.
  18. Выполнить обработку элементов квадратной матрицы A, имеющей N строк и N столбцов. Найти сумму элементов, стоящих на главной диагонали, и сумму элементов, стоящих на побочной диагонали (элементы главной диагонали имеют индексы от [0,0] до [N,N], а элементы побочной диагонали – от [N,0] до [0,N]).
  19. Выполнить обработку элементов квадратной матрицы A, имеющей N строк и N столбцов. Определить сумму элементов, расположенных параллельно главной диагонали (ближайшие к главной). Элементы главной диагонали имеют индексы от [0,0] до [N,N].
  20. Выполнить обработку элементов квадратной матрицы A, имеющей N строк и N столбцов. Определить произведение элементов, расположенных параллельно побочной диагонали (ближайшие к побочной). Элементы побочной диагонали имеют индексы от [N,0] до [0,N].
  21. Выполнить обработку элементов квадратной матрицы A, имеющей N строк и N столбцов. Каждой паре элементов, симметричных относительно главной диагонали (ближайшие к главной), присвоить значения, равные полусумме этих симметричных значений (элементы главной диагонали имеют индексы от [0,0] до [N,N]).
  22. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Исходная матрица состоит из нулей и единиц. Добавить к матрице еще один столбец, каждый элемент которого делает количество единиц в каждой строке чётным.
  23. Выполнить обработку элементов квадратной матрицы A, имеющей N строк и N столбцов. Найти сумму элементов, расположенных выше главной диагонали, и произведение элементов, расположенных выше побочной диагонали (элементы главной диагонали имеют индексы от [0,0] до [N,N], а элементы побочной диагонали — от [N,0] до [0,N]).
  24. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Дан номер строки L и номер столбца K, при помощи которых исходная матрица разбивается на четыре части. Найти сумму элементов каждой части.
  25. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Определить, сколько нулевых элементов содержится в каждом столбце и в каждой строке матрицы. Результат оформить в виде матрицы из N + 1 строк и M + 1 столбцов.
  26. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Дан номер строки L и номер столбца K, при помощи которых исходная матрица разбивается на четыре части. Найти среднее арифметическое элементов каждой части.
  27. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Все элементы имеют целый тип. Дано целое число H. Определить, какие строки имеют хотя бы одно такое число, а какие не имеют.
  28. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Исключить из матрицы столбец с номером K. Сомкнуть столбцы матрицы.
  29. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Добавить к матрице столбец чисел и вставить его под номером K.
  30. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Добавить к элементам каждого столбца такой новый элемент, чтобы сумма положительных элементов стала бы равна модулю суммы отрицательных элементов. Результат оформить в виде матрицы из N + 1 строк и M столбцов.
  31. Выполнить обработку элементов прямоугольной матрицы A, имеющей N строк и M столбцов. Добавить к элементам каждой строки такой новый элемент, чтобы сумма положительных элементов стала бы равна модулю суммы отрицательных элементов. Результат оформить в виде матрицы из N строк и M + 1 столбцов
< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Ольга Курыло
Ольга Курыло
Александр Кудлаев
Александр Кудлаев

Ознакомился с курсом "Практика по алгоритмизации и программированию на Python". Хотел сдать экзамен. Вместо традиционного тестирования было предложено написать курсовую работу. Написал. Отослал.Ответ на следующий день: "Задание не прверено". Сколько ожидать результата проверки работы?

Денис Саламатин
Денис Саламатин
Россия
Андрей Живорыкин
Андрей Живорыкин
Россия, Москва, НИЯУ МИФИ, 2012