Python. Генераторы списков для матричных операций

Генераторы списков для матричных операций. Примеры


Содержание


Поиск на других ресурсах:

1. Особенности применения генераторов списков для матриц

Генераторы списков удобно использовать для матриц (многомерных массивов) чисел заданной размерности. Матрицы можно представлять в виде кортежей или списков.
Лучше матрицы представлять в виде вложенных списков. В наиболее общем случае, представление двумерной матрицы в виде списка на языке Python имеет следующий вид

MatrixName = [ [ a11, a12, ..., a1n ],
               [ a21, a22, ..., a2n ],
               ...
               [ am1, am2, ..., amn ] ]

здесь

  • MatrixName – имя матрицы;
  • a11, …, amn — элементы матрицы. Это могут быть числа, числа с плавающей запятой, символы, строки, логические значения (true, false). Также это могут быть более сложные объекты, например, те же списки, кортежи или множества.

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

 

2. Примеры решения задач с использованием генераторов списков
2.1. Задачи на построение матриц
2.1.1. Построение матрицы заданной размерности. Элементы матрицы формируются случайным образом

Условие задачи. Построить матрицу заданной размерности m*n и вывести ее на экран. Элементы матрицы формируются случайно и имеют значение от 1 до 10 включительно.

Решение.

# Генераторы списков

# Задача.
# Сформировать матрицу размерностью m*n,
# где m, n вводяться с клавиатуры.

# 1. Подключить модуль random для формирования
# случайных чисел
import random

# 2. Ввести размерность матрицы
m = input('m = ')
n = input('n = ')

# 3. Сформировать матрицу размером m*n.
# Значения элементов матрицы формируются
# случайным образом в пределах [1, 10].
Matrix = [ [ random.randint(1, 11) for j in range(n)] for i in range(m) ]
print('Matrix:')

# 4. Вывести результат
for i in range(m):
    print(Matrix[i])

Тестовый пример

m = 4
n = 5
Matrix:
[10, 2, 3, 8, 7]
[6, 9, 2, 7, 11]
[2, 5, 9, 10, 4]
[10, 10, 11, 5, 10]

 

2.1.2. Формирование двумерной матрицы заданной размерности. Элементы матрицы вводятся с клавиатуры

Условие задачи. Сформировать матрицу размерностью m×n. Значение размеров m, n и значения элементов вводятся с клавиатуры.

Решение.

# Генераторы списков

# Задача.
# Сформировать матрицу размером m*n,
# где m, n вводятся с клавиатуры.
# Элементы матрицы вводятся с клавиатуры.

# 1. Ввести размерность матрицы
m = input('m = ')
n = input('n = ')

# 2. Сформировать матрицу размером m*n.
# Значения элементов матрицы вводятся с клавиатуры.
Matrix = [ [ input("M["+str(i)+"]["+str(j)+"]=") for j in range(n) ]
    for i in range(m) ]

# 3. Вывести результат
print('Matrix:')
for i in range(m):
    print(Matrix[i])

Тестовый пример

m = 2
n = 3
M[0][0]=1
M[0][1]=2
M[0][2]=3
M[1][0]=4
M[1][1]=5
M[1][2]=6
Matrix:
[1, 2, 3]
[4, 5, 6]

 

2.2. Задачи на обработку данных, которые размещаются в матрице
2.2.1. Вычисление количества элементов матрицы, которые больше 5

Условие задачи. Построить матрицу целых чисел размерностью m×n, где m — количество строк матрицы, n — количество столбцов матрицы. Значения m и n вводятся с клавиатуры. Числа в матрице формируются случайным образом и находятся в пределах от 1 до 10. Используя генератор списков вычислить количество элементов матрицы, которые более 5.

Решение.

# Генераторы списков

# Задача.
# Построить матрицу целых чисел заданной размерности m * n.
# С помощью генератора случайных чисел вычислить
# кол-во элементов матрицы, которые более 5.

# 1. Подключить модуль random
import random

# 2. Ввод размеров матрицы
m = input("m = ") # количество строк
n = input("n = ") # количество столбцов

# 3. Формирование матрицы размером m*n случайным образом
# с помощью цикла for
Matrix = []

# Внешний цикл формирования матрицы Matrix
for i in range(m):
    # Создать строку матрицы в виде списка
    row = []

    # Внутренний цикл формирования строки row
    for j in range(n):
        # Сформировать случайное число від 1 до 10
        randNumber = random.randint(1, 11)

        # Добавить случайное число к списку row
        row.append(randNumber)

    # Добавить строку row к матрице Matrix
    Matrix.append(row)

# 4. Вывести сформированную матрицу Matrix для контроля
print('Matrix M:')
for i in range(m):
    print(Matrix[i])

# 5. С помощью генератора списков вычислить количество элементов, которые больше 5
count = len([ Matrix[i][j] for i in range(m) for j in range(n) if Matrix[i][j]>5 ])
print(count)

Тестовый пример

m = 3
n = 4
Matrix M:
[10, 4, 3, 4]
[3, 3, 10, 2]
[11, 9, 1, 4]
4

 

2.2.2. Задача. Исчисление суммы элементов матрицы согласно условию

Условие задачи. Задан двумерный массив целых чисел размером m×n. Определить сумму элементов массива, которые находятся в пределах [5; 10]. Элементы массива вводятся с клавиатуры.

Решение.

При формировании генератора списка для расчета суммы используется функция sum().

# Генераторы списков

# Задача.
# Вычислить сумму элементов матрицы, находящихся в диапазоне [5; 10].
# Размер матрицы m, n и значения элементов вводятся с клавиатуры.

# 1. Ввести размерность матрицы
m = input('m = ')
n = input('n = ')

# 2. Сформировать матрицу размером m*n.
# Значения элементов матрицы вводятся с клавиатуры.
Matrix = [ [ input("M["+str(i)+"]["+str(j)+"]=") for j in range(n) ]
            for i in range(m) ]

# 3. Вычислить сумму - использовать генератор списков
summ = sum( Matrix[i][j] for i in range(m) for j in range(n)
    if (Matrix[i][j]>=5)and(Matrix[i][j]<=10))
print("summ = ", summ)

Тестовый пример

m = 2
n = 3
M[0][0]=3
M[0][1]=6
M[0][2]=2
M[1][0]=7
M[1][1]=1
M[1][2]=9
summ = 22

 

2.3. Задачи на создание новых матриц на основе заданных
2.3.1. Создать третью матрицу C на основе двух матриц A, B

Условие задачи. Заданы две матрицы A, B вещественных чисел. Размерность матриц m×n. Используя генератор списков сформировать третью матрицу C, каждый элемент cij которой определяется по правилу

cij = aij + bij

Решение.

# Генераторы списков

# Задача.
# На основе матриц A, B сформировать третью матрицу C.

# 1. Подключить модуль random для формирования случайных чисел
import random

# 2. Ввести размерность матриц A, B
m = input('m = ')
n = input('n = ')

# 3. Сформировать матрицы A и B размером m*n.
# Значения элементов матриц генерируются случайным образом
# и находятся в пределах [ 1; 100]
A = [ [random.randint(1, 101) for j in range(n)] for i in range(m) ]
B = [ [random.randint(1, 100) for j in range(n)] for i in range(m) ]

# 4. Сформировать третью матрицу C
C = [ [ A[i][j]+B[i][j] for j in range(n) ] for i in range(m) ]

# 5. Вывести матрицу A для контроля
print('-------------------------')
print("A:")
for i in range(m):
    print(A[i])

# 6. Вывести матрицу B для контроля
print('B:')
for i in range(m):
    print(B[i])

# 7. Вывести матрицу C
print('C:')
for i in range(m):
    print(C[i])

Тестовый пример

m = 4
n = 6
-------------------------
A:
[91, 25, 72, 95, 53, 97]
[14, 53, 36, 66, 36, 48]
[78, 57, 69, 97, 51, 39]
[42, 47, 53, 47, 21, 34]
B:
[48, 73, 25, 13, 92, 22]
[45, 56, 95, 64, 43, 89]
[43, 44, 11, 29, 82, 32]
[95, 87, 33, 90, 67, 79]
C:
[139, 98, 97, 108, 145, 119]
[59, 109, 131, 130, 79, 137]
[121, 101, 80, 126, 133, 71]
[137, 134, 86, 137, 88, 113]

 

2.3.2. Создать результирующую матрицу на основе исходной согласно с заданным условием

Условие задачи. Задана квадратная матрица A целых чисел размерностью n. На основе матрицы A образовать матрицу B, каждый элемент которой определяется по правилу:

B[i][j] = A[i][j] + 10

Для получения результирующей матрицы B использовать генератор списка.

Решение.

# Генераторы списков

# Задача.
# На основе матрицы A создать матрицу B согласно правилу:
# B[i][j] = A[i][j] + 10

# 1. Подключить модуль random для формирования случайных чисел
import random

# 2. Ввести размерность матрицы A
m = int(input('m = '))
n = int(input('n = '))

# 3. Сформировать матрицу A размером m*n
# Значения элементов матрицы генерируются случайным образом
# и находятся в пределах [ -10; 10]
A = [ [random.randint(-10, 11) for j in range(n)] for i in range(m) ]

# 4. Вывести матрицу A для контроля
print('-------------------------')
print("A:")
for i in range(m):
    print(A[i])

# 5. Формирование матрицы B с помощью генератора списка
B = [ [ A[i][j]+10 for j in range(n) ] for i in range(m) ]

# 6. Вывести результирующую матрицу B
print("B:")
for i in range(m):
    print(B[i])

Тестовый пример

m = 3
n = 5
-------------------------
A:
[-4, 10, -5, 2, -6]
[10, -3, 5, 10, -7]
[7, -9, -3, -3, 11]
B:
[6, 20, 5, 12, 4]
[20, 7, 15, 20, 3]
[17, 1, 7, 7, 21]

 


Связанные темы