Как реализовать матрицу с классами - PullRequest
0 голосов
/ 25 июня 2018

Мне нужно реализовать матрицу с N ячейками, и эти ячейки зависят от K параметров, некоторых фиксированных и других переменных. Я хотел бы сделать все это с помощью классов. Может ли кто-нибудь объяснить мне основную процедуру?

1 Ответ

0 голосов
/ 25 июня 2018

Я знаю, я не должен отвечать на это, так как это "домашнее задание", но я не могу устоять перед классом матрицы !!

По сути, матрица - это не что иное, как список списков. Реализация его как класса означает, что вы должны добавить некоторые базовые функции (методы), такие как, получить значение определенной строки / столбца, распечатать матрицу и т. Д. *

Вот простой, с которого вы можете начать:

class Matrix2D:
    def __init__(self):
        '''
        Init an empty matrix.
        '''
        self.matrix = []
        self.rows = 0
        self.columns = 0
        self.name = 'Unnamed'

    def __str__(self):
        return self.matrix

    def generate(self, rows, columns, verbose=False):
        '''
        Return a list of lists containing the indices of the matrix (row, col)
        and prints it by row.
        int, int -> [[(int, int), ...], ...]
        '''
        self.rows = rows
        self.columns = columns
        self.matrix = [[(row, col) for col in range(columns)] for row in range(rows)]
        if verbose ==  True:
            print(f'Generated a {self.rows} row/s by {self.columns} column/s matrix')
            print('--------' * columns)
            self.printme()
            print('--------' * columns)
        return self.matrix

    def printme(self, verbose=False):
        '''
        Print the matrix by row.
        '''
        if verbose == True:
            print(f'I am a {self.rows} row/s by {self.columns} column/s matrix')
        for row in self.matrix:
            print(row)

    def get_row(self, n, verbose=False):
        '''
        Return the row n of the matrix.
        '''
        if verbose ==  True:
            print(f'matrix[row={n}]...')
            print(self.matrix[n])
        return self.matrix[n]

    def get_col(self, n, verbose=False):
        '''
        Return the column n of the matrix.
        '''
        column_items = []
        i = 0
        while i < self.rows:
            column_items.append(self.matrix[i][n])
            i += 1
        if verbose ==  True:
            print(f'matrix[col={n}]...')
            for item in column_items:
                print(item)
        return column_items

    def get_cell(self, row, col, verbose=False):
        '''
        Return a specific cell of the matrix.
        '''
        if verbose ==  True:
            print(f'cell[row={row}, col={col}]...')
            print(self.matrix[row][col])
        return self.matrix[row][col]

    def write_cell(self, row, col, data, verbose=False):
        '''
        Assign some data to a specific cell of the matrix.
        '''
        self.matrix[row][col] = data
        if verbose ==  True:
            print('Data wrote into cell[row={row}, col={col}]...')
            print(self.matrix[row][col])                            
        return self.matrix[row][col]

Тест:

print('#########')
m = Matrix2D()
m.generate(4,5,True)
m.printme()
m.get_row(1,True)
m.get_col(1,True)
m.get_cell(3,2,True)
m.write_cell(3,2, (9,9,9),True)

Выход:

#########
Generated a 4 row/s by 5 column/s matrix
----------------------------------------
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)]
[(1, 0), (1, 1), (1, 2), (1, 3), (1, 4)]
[(2, 0), (2, 1), (2, 2), (2, 3), (2, 4)]
[(3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
----------------------------------------
[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)]
[(1, 0), (1, 1), (1, 2), (1, 3), (1, 4)]
[(2, 0), (2, 1), (2, 2), (2, 3), (2, 4)]
[(3, 0), (3, 1), (3, 2), (3, 3), (3, 4)]
matrix[row=1]...
[(1, 0), (1, 1), (1, 2), (1, 3), (1, 4)]
matrix[col=1]...
(0, 1)
(1, 1)
(2, 1)
(3, 1)
cell[row=3, col=2]...
(3, 2)
Data wrote into cell[row={row}, col={col}]...
(9, 9, 9)

Далее вы можете добавить некоторые дополнительные методы для более сложных операций, таких как умножение матриц, транспонирование и т. Д. ... Веселитесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...