Как транспонировать матрицу в питоне
Перейти к содержимому

Как транспонировать матрицу в питоне

  • автор:

Как правильно транспонировать матрицу

Как правильно сделать функцию из моего кода и чтобы она работала полностью? Код написал, но он не работает с некоторыми входными данными. А именно при нулях (строка = 0, колонка = 0) и при очень больших матрицах(в тестах валится на 950×764 матрице). Функцию, которую пытался написать и код — ниже. Помогите пожалуйста довести до ума. Условие: Есть матрица размера m × n. Нужно написать функцию, которая её транспонирует. Транспонированная матрица получается из исходной заменой строк на столбцы. Формат ввода: В первой строке задано число n — количество строк матрицы. Во второй строке задано m — число столбцов, m и n не превосходят 1000. В следующих n строках задана матрица. Числа в ней не превосходят по модулю 1000. Формат вывода: Напечатайте транспонированную матрицу в том же формате, который задан во входных данных. Каждая строка матрицы выводится на отдельной строке, элементы разделяются пробелами. Пример вводы/вывода: Ввод 4 3 1 2 3 0 2 6 7 4 1 2 7 0 Вывод 1 0 7 2 2 2 4 7 3 6 1 0 Просто код:

rows = int(input().strip()) colums = int(input().strip()) a = [[0]*colums for _ in range(rows)] for i in range(rows): a[i] = [int(j) for j in input().strip().split(" ")] rows_count = len(a) colums_count = len(a[0]) new_matrix = [[0] * rows_count for _ in range(colums_count)] for i in range(rows_count): for j in range(colums_count): new_matrix[j][i] = a[i][j] for row in new_matrix: print(*row) 

Пытался создать функцию из кода выше, но безуспешно. Много ошибок:

def transpose(rows, colums): rows_count = len(a) colums_count = len(a[0]) new_matrix = [[0] * rows_count for _ in range(colums_count)] for i in range(rows_count): for j in range(colums_count): new_matrix[j][i] = a[i][j] for row in new_matrix: print(*row) if __name__ == '__main__': rows = int(input().strip()) colums = int(input().strip()) a = [[0] * colums for _ in range(rows)] for i in range(rows): a[i] = [int(j) for j in input().strip().split(" ")] print(transpose(rows, colums)) 

Правка после комментариев Sergey и A_Vaclav

def transpose(a): for i in range(rows): a[i] = [int(j) for j in input().strip().split(' ')] rows_count = len(a) colums_count = len(a[0]) new_matrix = [[0] * rows_count for _ in range(colums_count)] for i in range(rows_count): for j in range(colums_count): new_matrix[j][i] = a[i][j] for row in new_matrix: print(*row) if __name__ == '__main__': rows = int(input().strip()) colums = int(input().strip()) a = [colums for _ in range(rows)] print(transpose(a)) 

Результат работы функции: Ввод: 4 3 1 2 3 2 4 5 6 78 8 6 8 9 Вывод: 1 2 6 6 2 4 78 8 3 5 8 9 None Проверка случая, когда на вход подаются нули:

def transpose(a): rows_count = len(a) colums_count = len(a) if rows_count == colums_count == 0: print('None') new_matrix = [] for j in range(colums_count): tmp = [] for i in range(rows_count): tmp.append(a[i][j]) new_matrix.append(tmp) return new_matrix if __name__ == '__main__': rows = int(input().strip()) colums = int(input().strip()) a = [[0] * colums for _ in range(rows)] for i in range(rows): a[i] = [int(j) for j in input().strip().split(' ')] # print(transpose(a)) for row in transpose(a): if row != 0: print(*row) 

Входные 0 0 Выходные None Входные: 4 5 4 5 6 7 8 5 6 7 7 8 6 7 8 8 9 8 9 6 4 3 Выходные: (выводит без последней колонки) 4 5 6 8 5 6 7 9 6 7 8 6 7 7 8 4 Если я делаю так colums_count = len(a[0]), то матрица транспонируется нормально, но при нулях ошибка! NoneType is not iterable. Пытался в конце под main() задать условие в цикле, что вывод только если row != 0, но это не помогло

Нужно протранспонировать матрицу в питоне

Нужно протранспонировать матрицу в питоне.
Вот код:
import random
print(‘Введите кол-во строк’)
n=int(input())
print(‘Введите кол-во строк’)
m=int(input())
a = [[0] * m for i in range(n)]
for i in range(n):
for k in range(m):
a[i][k]= (random.randint(-100,100))
for i in range (n):
for j in range (m):
print (‘%6d’% a[i][j], end=’ ‘)
print ()
#нужно вывести максимальный элемент каждого столбца a[j] и каждой строки a[i]
for i in range(n):
print(‘строка №’,i+1, ‘eё максимальный элемент’,max(a[i]))

Лучший ответ
Транспонирование матрицы a в матрицу b без использования библиотек:

b = [[a[j][i] for j in range(len(a))] for i in range(len(a[0]))]

Антон Рак РакУченик (101) 1 год назад
Спасибо, Андрюха))
Остальные ответы

Чтобы транспонировать матрицу в Python, вы можете просто использовать встроенную функцию «zip», чтобы поменять местами строки и столбцы матрицы. Вот пример того, как вы можете изменить свой код, чтобы транспонировать матрицу:

import random

print(‘Enter number of lines’)
n=int(input())
print(‘Enter number of lines’)
m=int(input())

a = [[0] * m for i in range(n)]
for i in range(n):
for k in range(m):
a[i][k]= (random.randint(-100,100))

# Transpose the matrix
a_transposed = list(zip(*a))

# Print the transposed matrix
for row in a_transposed:
for val in row:
print (‘%6d’% val, end=’ ‘)
print()

# Print the maximum element of each column (which are now the rows of the transposed matrix)
for i in range(m):
print(‘column number’,i+1, ‘its maximum element’,max(a_transposed[i]))

Этот код сначала сгенерирует матрицу случайных целых чисел с «n» строками и «m» столбцами, как в исходном коде. Затем он будет использовать функцию «zip» для транспонирования матрицы и сохранения результата в новой переменной с именем «a_transposed». Затем код напечатает транспонированную матрицу и максимальный элемент каждого столбца (которые теперь являются строками транспонированной матрицы).

Надеюсь, это поможет! Дайте знать, если у вас появятся вопросы.

Алекс КухаВысший разум (444637) 1 год назад

ваще

NumPy Matrix transpose() — транспонирование массива в Python

Транспонирование матрицы получается путем перемещения данных строк в столбец и данных столбцов в строки. Если у нас есть массив формы (X, Y), то транспонирование массива будет иметь форму (Y, X).

Транспонирование матрицы NumPy()

Модуль Python numpy в основном используется для работы с массивами в Python. Мы можем использовать функцию transpose() для транспонирования массива.

import numpy as np arr1 = np.array([[1, 2, 3], [4, 5, 6]]) print(f'Original Array:\n') arr1_transpose = arr1.transpose() print(f'Transposed Array:\n') 
Original Array: [[1 2 3] [4 5 6]] Transposed Array: [[1 4] [2 5] [3 6]] 

Транспонирование объекта, подобного массиву

Функция transpose() также работает с массивом, подобным объекту, например, с вложенным списком.

arr1 = [[1, 2, 3], [4, 5, 6]] arr1_transpose = np.transpose(arr1) 

Результат будет таким же, как и в предыдущей программе. Ссылка: документ API

Транспонирование и умножение матриц на Python

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

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

Транспонирование матрицы

Если вы заменяете строки матрицы столбцом той же матрицы, это называется транспонированием матрицы. Обозначается как X’. Например: Элемент в i-й строке и j-м столбце в X будет помещен в j-ю строку и i-й столбец в X’.

Пример: Предположим, мы взяли следующую матрицу A:

A = [[5, 4, 3] [2, 4, 6] [4, 7, 9] [8, 1, 3]]

At будет транспонированием указанной выше матрицы, т. е. A [i] [j] = At [j] [i], и поэтому At должно быть:

В = [5, 2, 4, 8] [4, 4, 7, 1] [3, 6, 9, 3]

Программа Python для транспонирования матрицы

Теперь мы напишем программу на Python для транспонирования входной заданной матрицы, где мы выполняем операцию, как мы выполнили в приведенном выше примере. Чтобы выполнить операцию транспонирования матрицы, мы будем использовать метод вложенного цикла for.

Давайте разберемся с использованием и реализацией этого метода на следующем примере.

# Define a matrix A A = [[5, 4, 3], [2, 4, 6], [4, 7, 9], [8, 1, 3]] # Define an empty matrix of reverse order transResult = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] # Use nested for loop on matrix A for a in range(len(A)): for b in range(len(A[0])): transResult[b][a] = A[a][b] # store transpose result on empty matrix # Printing result in the output print("The transpose of matrix A is: ") for res in transResult: print(res)
The transpose of matrix A is: [5, 2, 4, 8] [4, 4, 7, 1] [3, 6, 9, 3]

Умножение матриц

В этом разделе мы напишем программу на Python для умножения двух входных матриц и выведем результат на выходе. Эта программа укажет, как умножать две матрицы, имеющие определенные значения.

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

Умножение матриц — это бинарная операция, в которой используется пара матриц для создания другой матрицы. Элементы в матрице умножаются в соответствии с элементарной арифметикой.

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

Пример: предположим, что мы взяли следующие две матрицы A и B:

A = [[5, 4, 3] [2, 4, 6] [4, 7, 9]] and, B = [[3, 2, 4] [4, 3, 6] [2, 7, 5]]

C будет объединением двух указанных выше матриц, т. е. C = A + B, и поэтому C должно быть:

C = [[37, 43, 59] [34, 58, 62] [58, 92, 103]]

Как мы видим, результирующая матрица C, также известная как произведение матриц, имеет то же количество строк, что и первая матрица (матрица A), и такое же количество столбцов, как и вторая матрица (матрица B). Мы также знаем этот тип умножения матриц как скалярное произведение матриц.

Умножение двух матриц

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

  1. Использование метода вложенного цикла.
  2. Использование метода понимания вложенного списка.

В обоих методах мы напишем пример программы, чтобы понять их реализацию для умножения двух матриц.

Способ 1: Использование метода вложенного цикла

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

Давайте разберемся с реализацией этого метода на следующем примере.

# Define two matrix A and B in program A = [[5, 4, 3], [2, 4, 6], [4, 7, 9]] B = [[3, 2, 4], [4, 3, 6], [2, 7, 5]] # Define an empty matrix to store multiplication result multiResult = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] # Using nested for loop method on A & B matrix for m in range(len(A)): for n in range(len(B[0])): for o in range(len(B)): multiResult[m][n] += A[m][o] * B[o][n] # Storing multiplication result in empty matrix # Printing multiplication result in the output print("The multiplication result of matrix A and B is: ") for res in multiResult: print(res)
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]

Способ 2: Использование метода понимания вложенного списка

В этом методе мы будем использовать понимание вложенного списка, чтобы получить результат умножения двух входных матриц. При использовании в программе метода понимания списка мы также будем использовать «zip в Python» для вложенного списка. Давайте разберемся с реализацией этого метода на следующем примере.

# Define two matrix A & B in the program A = [[5, 4, 3], [2, 4, 6], [4, 7, 9]] B = [[3, 2, 4], [4, 3, 6], [2, 7, 5]] # Using nested list method with zip in Python multiResult = [[sum(a * b for a, b in zip(Arow, Bcol)) for Bcol in zip(*B)] for Arow in A] # Printing multiplication result in the output print("The multiplication result of matrix A and B is: ") for res in multiResult: print(res)
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *