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]

 


Споріднені теми