自定义矩阵类(仅使用1个列表),乘以矩阵

时间:2014-11-27 18:04:10

标签: python matrix matrix-multiplication multiplying

我正在尝试为我的作业创建一个python类。我们必须设计一个自定义类处理矩阵。

现在我对编程很新,但是我得到的主要问题是乘以两个矩阵。我无法让我的类实际上将行与多个列相乘,因为我试图仅使用1个列表而不是数组来解决此分配。

我已经搜索过但看起来似乎无法找到答案。我不能使用numpy并且想看看它是否可以仅使用1个列表来描述矩阵。

class simplematrix(object):

    def __init__(self,n=0,m=0,values=list()):
        self.matrix = []
        for x in values:
            self.matrix.append(x)
        if self.matrix == []:
            while len(self.matrix)<n*m:
                self.matrix.append(0)
        if n*m != len(self.matrix):
            raise ValueError('Length of values is different from length of matrix')
        self.n = n
        self.m = m
    def __str__(self):
    a = ''
    if self.matrix == []:
        for x in range(self.n):
            a += '\n'
            for y in range(self.m):
                a += ' '+str(0)
    else:
        for x in range(self.n):
            a += '\n'
            for y in range(self.m):
                a += ' '+str(self.matrix[y+x*self.m])
    return a

    def __add__(self,other):
        if self.n != other.n or self.m != other.m:
            raise ValueError('Matrices have different sizes.')
        ans_val = []
        for x in range(len(self.matrix)):
            ans_val.append(self.matrix[x]+other.matrix[x])
        ans = simplematrix(self.n,self.m,ans_val)
        return ans

    def __mul__(self,other):
        if self.m != other.n:
            raise ValueError('Matrices have incorrect sizes.')
        ans = simplematrix(other.n,self.m)#WTF WTF WTF WTF
        for y in range(self.m):
            a = self.get_row(y)
            b = other.get_col(y)
            c = 0
            for z in range(len(a)):
                c += a[z]*b[z]
            ans.matrix[y*self.m] = c

我似乎无法弄清楚如何进一步。这仅计算产品矩阵的第一列。我不知道如何将b更改为另一列,但仍然保持同一列,因为我仍然需要使用它:S?

希望它看起来不可怕。

关于如何解决这个问题的任何想法?

0 个答案:

没有答案