2015-05-04 3 views
-2

При создании функции для умножения матриц мой код печатает только первое значение первой матрицы и заполняет все остальные позиции нулем. Ниже приведен класс с различными функциями и функцией умножения матриц ниже него. Работа обработки исключений и функция печати также работают. Единственная проблема возникает сMatrices Class Calculator Python

class Matrix(object): 
"""Input the dimensions of your matrix""" 

    def __init__(self, rows = 3, cols = 3): 
     self.rows = rows 
     self.cols = cols 
     self.rowList = [ [0 * x for x in range(cols)] for count in range(rows)] 

    def setRow(self, index = 0, RowData = [0]*2): 
     """Enter the index of the row you are defining followed by a string with the values seperated by commas""" 
     i = 0 
     if index >= self.cols: 
      print("Index is out of the bounds that you defined earlier") 
      return None 
     if len(RowData) != self.cols: 
      print("The Row length exceeds the column size of this matrix") 
      return None 
     else: 
      self.rowList[index] = RowData 

    def rowCount(self): 
     return self.rows 

    def columnCount(self): 
     return self.cols 

    def get(self, row, col): 
     return self.rowList[row][col] 

    def set(self, value = 0, row = 0, col = 0): 
     self.rowList[row][col] = value 
     return None 

def MultiplyMatrices(A = Matrix(), B = Matrix()): 
    ARows = A.rowCount() 
    ACols = A.columnCount() 
    BRows = B.rowCount() 
    BCols = B.columnCount() 
    if ACols != BRows: 
     print("Matrices are incompatible, therefore cannot be multiplied") 
     return None 

    Result = Matrix(ARows, BCols) 
    for A_row in range(ARows): 
     for B_col in range(BCols): 
      Res = 0 
      for B_row in range(BRows): 
        Res = Res + A.get(A_row, B_row) * B.get(B_row, B_col) 
        Result.set(Res, A_row, B_col) 
        return Result 
+5

Вы забыли сказать, что такое –

+0

Я забыл, что именно? – astorinoa

+2

В вашем вопросе говорится: «Единственная проблема возникает», а затем просто отключается. Он указывал, что вы забыли рассказать нам, в чем проблема, сделав то же самое. – abarnert

ответ

0

Я думаю, что ваша проблема в вашем цикле «для».

Вы

for B_row in range(BRows): 
       Res = Res + A.get(A_row, B_row) * B.get(B_row, B_col) 
       Result.set(Res, A_row, B_col) 
       return Result 

, но это должно быть

for A_row in range(ARows): 
    for B_col in range(BCols): 
     Res = 0 
     for B_row in range(BRows): 
       Res = Res + A.get(A_row, B_row) * B.get(B_row, B_col) 
       Result.set(Res, A_row, B_col) 
return Result 

Путь у вас есть вещи, написано, что ваш код будет возвращать матрицу Результат только после вычисления первого значения ввода. Я предполагаю, что у вас есть другие значения по умолчанию, равные 0, что объясняет, почему остальные записи в вашей матрице результатов печатаются как 0.

Кстати, вы можете рассмотреть одну вещь, включающую эту функцию Multiply Matrix в ваш класс Matrix. Если определить функцию класса, используя эту подпись

def __mul__(self): 
    "Your code here" 

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

+0

Большое вам спасибо! – astorinoa

0

У вас, похоже, есть две ошибки вложения, так что ваш MultiplyMatrices не будет работать правильно. Вот исправленный код:

for A_row in range(ARows): 
    for B_col in range(BCols): 
     Res = 0 
     for B_row in range(BRows): 
      Res = Res + A.get(A_row, B_row) * B.get(B_row, B_col) 
     Result.set(Res, A_row, B_col) # this edited so it's the sum over B_row 
return Result # this set so it's after all three loops have completed 

Как примечание стороны, я не вижу, как ваши значения по умолчанию (A = Matrix(), B = Matrix()) когда-либо будет работать хорошо для вас. Было бы почти всегда лучше просто создать исключение, если вы не получите требуемый ввод, а не тихо возвращаете матрицу всех нулей.

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

+0

Этот код был написан для класса, где Numpy не преподавали, поэтому, к сожалению, мне не разрешили использовать его. Спасибо за помощь!!! – astorinoa