Transpozycja i mnożenie macierzy
Treść zadania
Wczytaj macierz A o wymiarach n×m i macierz B o wymiarach r×p.
a) Wypisz macierz transponowaną $A^T$ o wymiarach m×n: jej wiersz j to kolumna j macierzy A, czyli $A^T_{ji} = A_{ij}$.
b) Wypisz iloczyn $A \cdot B$ o wymiarach n×p, w którym $(A \cdot B)_{ij} = \sum_{k} A_{ik} \cdot B_{kj}$ — element w wierszu i i kolumnie j to suma iloczynów kolejnych elementów wiersza i macierzy A i kolumny j macierzy B. Iloczyn istnieje tylko wtedy, gdy liczba kolumn A jest równa liczbie wierszy B ($m = r$); w przeciwnym razie zamiast iloczynu wypisz Niezgodne wymiary.
Dane wejściowe
- 1. linia:
n m— wymiary macierzyA - następnie
nlinii pomliczb całkowitych - następnie linia
r p— wymiary macierzyB - następnie
rlinii popliczb całkowitych
Dane wyjściowe
Najpierw m linii macierzy $A^T$, zaraz po nich n linii iloczynu $A \cdot B$ albo jedna linia Niezgodne wymiary. (bez pustych linii między częściami).
Ograniczenia
1 ≤ n, m, r, p ≤ 10- elementy macierzy mają wartość bezwzględną nie większą niż 100
Uwagi
- Mnożenie macierzy wymaga trzech zagnieżdżonych pętli: po wierszach
A, po kolumnachBi po sumowanych elementach. - Mnożenie macierzy nie jest przemienne — $A \cdot B$ zwykle różni się od $B \cdot A$, a jeden z tych iloczynów może w ogóle nie istnieć.
Przykład
2 3 1 2 3 4 5 6 3 2 7 8 9 10 11 12
1 4 2 5 3 6 58 64 139 154
Na przykład $58 = 1 \cdot 7 + 2 \cdot 9 + 3 \cdot 11$ (pierwszy wiersz A i pierwsza kolumna B).
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 13
Zadania w tym rozdziale ćwiczą pracę z listami dwuwymiarowymi (macierzami): tworzenie, wczytywanie, przechodzenie po wierszach i kolumnach oraz przekształcanie.
Każde zadanie (oraz każdy podpunkt) jest osobnym, niezależnym programem: czyta standardowe wejście (stdin) i wypisuje wynik na standardowe wyjście (stdout).
Konwencje wspólne:
- Dane wczytuj dokładnie w kolejności podanej w sekcji Wejście.
- Wiersz macierzy na wejściu to jedna linia z liczbami oddzielonymi spacjami — wczytaj całą linię i rozbij ją po spacjach (
input().split()). - W wyjściu macierzy: każdy wiersz w osobnej linii, elementy oddzielone pojedynczą spacją.
- Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono1 1 5 1 1 -3
5 -15
Test 2
Nie uruchomiono1 3 1 2 3 3 1 4 5 6
1 2 3 32
Test 3
Nie uruchomiono3 1 1 2 3 1 3 4 5 6
1 2 3 4 5 6 8 10 12 12 15 18
Test 4
Nie uruchomiono2 2 1 2 3 4 3 2 1 0 0 1 1 1
1 3 2 4 Niezgodne wymiary.
Test 5
Nie uruchomiono2 2 2 -1 0 3 2 2 1 0 0 1
2 0 -1 3 2 -1 0 3
Test 6
Nie uruchomiono2 3 1 0 2 -1 3 1 3 2 3 1 2 1 1 0
1 -1 0 3 2 1 5 1 4 2
Test 7
Nie uruchomiono1 2 1 1 1 2 5 5
1 1 Niezgodne wymiary.