Kalkulator macierzowy

0

Cześć,
muszę zrobić kalkulator macierzowy a jestem w tym raczej zielony bo w pythonie nie pracowałem w ogóle :/,
kod który zrobiłem to raczej zlepek informacji znalezionych w internecie i przerobionych na moje potrzeby, mam prośbę odnośnie nakierowania lub podania pomysłu odnośnie sposobu wykonywania działań na macierzach ponieważ te które zastosowałem są raczej tylko poglądowe i działać nie będą :/


def dodawanie(macierz, macierz_2):
    return macierz + macierz_2


def odejmowanie(macierz, macierz_2):
    return macierz - macierz_2


def mnozenie(macierz, macierz_2):
    return macierz * macierz_2


def dzielenie(macierz, macierz_2):
    return macierz / macierz_2


def potegowanie(macierz, macierz_2):
    return macierz ** macierz_2


wyjscie = False
while wyjscie == False:

    print("Menu")
    print("1 - dodawanie")
    print("2 - odejmowanie")
    print("3 - mnozenie")
    print("4 - dzielenie")
    print("5 - transpondacja")
    print("6 - wyjscie")

    choice = input("Wybierz jedną opcje z powyższych: ")

    if choice != '1' and choice != '2' and choice != '3' and choice !='4' and choice != '5' and choice !='6':
        print ('Podałeś nieistniejącą opcje.')
        choice = input("Wybierz jedną z opcji: ")

    if choice == '6':
        pytanie = input("Wyjść z programu? (Tak/Nie): ")
        if pytanie == 'Tak':
            wyjscie = True
            print('Koniec programu!')
            exit()
        elif pytanie == 'Nie':
            wyjscie = False
            print('Powrót do programu')
            choice = input("Wybierz jedną opcje z powyższych: ")


    macierz_wiersze = int(input('Podaj ilość wierszy w macierzy: '))
    macierz_kolumny = int(input('Podaj ilość kolumn w macierzy: '))

    macierz2_wiersze = macierz_wiersze
    macierz2_kolumny = macierz_kolumny

    macierz = []
    macierz_2 = []
    r_macierz = []

    if (macierz_wiersze == macierz2_wiersze) and (macierz2_wiersze == macierz2_kolumny):
        print('Wpisz elementy macierzy pierwszej: ')
        for i in range(0, macierz_wiersze):
            row = []
            input_variable = None
            for j in range(0, macierz_kolumny):
                input_variable = int(input('Wpisz element macierzy[{0}][{1}]: '.format(i, j)))
                row.append(input_variable)
                macierz.append(row)
        if  choice != '5':
            print('Wpisz elementy macierzy drugiej: ')
            for i in range(0, macierz2_wiersze):
                row = []
                input_variable = None
                for j in range(0, macierz2_kolumny):
                    input_variable = int(input('Wpisz element macierzy[{0}][{1}]: '.format(i, j)))
                    row.append(input_variable)
                    macierz_2.append(row)
    else:
        print("Podałeś złe dane!")

    if choice == '1':
        print('Wynik')
        wynik = [[macierz[i][j] - macierz_2[i][j]
                  for j in range(len(macierz[0]))] for i in range(len(macierz))]
        for r in wynik:
            print(r)

    elif choice == '2':
        print('Wynik')
        wynik = [[macierz[i][j] - macierz_2[i][j]
                  for j in range(len(macierz[0]))] for i in range(len(macierz))]
        for r in wynik:
            print(r)

    elif choice == '3':
        print('Wynik')
        wynik = [[macierz[i][j] * macierz_2[i][j]
                  for j in range(len(macierz[0]))] for i in range(len(macierz))]
        for r in wynik:
            print(r)

    elif choice == '4':
        print('Wynik')
        wynik = [[macierz[i][j] / macierz_2[i][j]
                  for j in range(len(macierz[0]))] for i in range(len(macierz))]
        for r in wynik:
            print(r)

    elif choice == '5':
        print('Wynik')
        for i in range(len(macierz)):
            for j in range(len(macierz)):
                wynik =
        for r in wynik:
            print(r)

Nie ukrywam że mi się trochę pali z tym, bo myślałem że podołam zadaniu ale wyszło inaczej...
Z góry dziękuje ;)

0

Wykorzystaj moduł Numpy, który już ma zaimplementowane te operacje:

import numpy as np

X = np.arange(9).reshape(3,3)
Y = np.arange(10,19).reshape(3,3)

X + Y
X - Y
X.dot(Y)
X:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

Y:
array([[10, 11, 12],
       [13, 14, 15],
       [16, 17, 18]])

X + Y:
array([[10, 12, 14],
       [16, 18, 20],
       [22, 24, 26]])

X.dot(Y):
array([[ 45,  48,  51],
       [162, 174, 186],
       [279, 300, 321]])
0

Te linki to działania miałem bardzo podobnie zrobione ale one niestety nie wyświetlają wyników poprawnie, przynajmniej u mnie a co do numpy to widzę właśnie że jest to prostsze ale u mnie wiąże się to z dużą ilością przerabiania ze względu na moje umiejetności co do pythona a nie mam czasu na to niestety :/

1

Jeśli macierze mogę być kwadratowe, to masz przepis jak uzupełnić pojedynczą macierz (źródło):

import numpy as np

n=int(input("Enter the matrix size: "))
mat=np.zeros((n,n))

for i in range(n):
   mat[i]=input().split(" ")

I wpisujesz na przykład:

3

3 -1 3
2 4 0
1 -6 5

Jak potrzebujesz, to można łatwo dostosować kod do macierzy prostokątnych. Daj znać.
Załóżmy, że Twoje wypełnione macierze to X i Y. Mamy następujące operacje:

Dodawanie: X + Y
Odejmowanie: X - Y
Mnożenie: X.dot(Y)
Transpozycja: X.T lub X.transpose()
Dzielenie przez n: X/n

Poskładaj do kupy i masz rozwiązanie.

0

Działa wszystko tak jak powinno :) udało się to szybko zrobić i jest kod krótszy o połowę bo bez tych wszystkich niepotrzebnych pętli. Dzięki wielkie za pomoc :)

0

Można też stworzyć klasę: Matrix, jak tutaj: https://github.com/lion137/Competitive-Helper/blob/master/algorithm.py

1 użytkowników online, w tym zalogowanych: 0, gości: 1