Python中的矩阵乘法代码

时间:2015-12-05 12:36:15

标签: python function class matrix

我有一份Python学校的工作。 我需要创建一个名为" Matrix"并给它一些我可以做的动作。

直到多功能一切都很棒!但在这里我有一个问题。 我非常肯定我的代码已达到目标!但现在,我只是不知道该怎么做。

class Matrix:

    def __init__(self,lst):
        self.mat = lst
        self.dim = (len(lst), len(lst[0]))

    def get(self,i,j):
        if (i) <= self.dim[0] and (j) <= self.dim[1]:
            return self.mat[i-1][j-1]
        else:
            print "index not in matrix!"
            return None

    def mult(self,other):
        new_mat = []
        for r in range(1,self.dim[0]+1):
            new_row = []
            res = 0
            for c in range(1,other.dim[0]+1):
                res += (self.get(r,c) * other.get(c,r))
                new_row.append(res)
            new_mat.append(new_row)
            new_row = []
        return Matrix(new_mat)

它总是告诉我,我把索引,但我不明白如何

输入即时检查是

A = Matrix([[1,0,2],[3,1,1],[4,5,2],[0,2,8]]) 
B = Matrix([[1,3],[4,2],[0,5]])
C = A.mult(B)

任何人都可以看看这个并告诉我什么是错的?

1 个答案:

答案 0 :(得分:0)

嘿,我改变了你的代码。不要使用get方法。看看

class Matrix:

def __init__(self,lst):
    self.mat = lst
    self.dim = (len(lst), len(lst[0]))
    self.rows=[lst[i][:] for i in range(self.dim[0])]
    self.columns=[[lst[i][j] for i in range(self.dim[0])] for j in range(self.dim[1])]

def get(self,i,j):
    if (i) <= self.dim[0] and (j) <= self.dim[1]:
        return self.mat[i-1][j-1]
    else:
        print "index not in matrix!"
        return None

def __multList(self,list1,list2):
    if len(list1)==len(list2):
        return sum([list1[i]*list2[i] for i in range(len(list1))])

def mult(self,other):
    matrix=[]
    for i in range(len(self.rows)):
        rows=[]
        for j in range(len(other.columns)):
            rows.append(self.__multList(other.columns[j],self.rows[i]))
        matrix.append(rows)
    return Matrix(matrix)

和你的矩阵,

A = Matrix([[1,0,2],[3,1,1],[4,5,2],[0,2,8]]) 
B = Matrix([[1,3],[4,2],[0,5]])
C=A.mult(B)
print C.mat

你得到了

[[1, 13], [7, 16], [24, 32], [8, 44]]