def __mul__(self, q): if isinstance(q, Matrix): #jezeli mnozymi macierz przez maciez.. if self.dim[1] != q.dim[0]: #sprawdzamy czy wymiary macierzy sa odpowiednie arg = ("p.dim[1] != q.dim[0]", self.dim[1], q.dim[0]) #wyrzucamy wyjatek ze jest bee raise IndexError, arg else: #jesli wszystko jest ok to mnozymy # do the multiplication m = Matrix(dim=(self.dim[0], q.dim[1])) #tworzymy maciez wynikowa for r in range(self.dim[0]): # wiersze pierwszej macierzy for c in range(q.dim[1]): # kolumny drugiej macierzy # wymnazamy teraz poszczegolne "sumy" wierszy i kolumn wierszWek = self.data[r] kolWek = [q.data[a][c] for a in xrange(q.dim[0])] m.data[r][c] = sum(map(lambda x, y: x * y, wierszWek, kolWek)) return m #wynik elif isinstance(q, float) or isinstance(q, int): # jesli mnozymy przez liczbe int czy float # tworzymy macierz wynikowa m = Matrix(dim=self.dim) for r in range(self.dim[0]): # wiersze m.data[r] = map(lambda x: x * q, self.data[r]) #mnozenie return m #zwracamy wynikowa macierz else: arg = ("Wartosc jest niestosownego formatu: ", q) #jesli bedziemy chcieli mnozyc przez jakies smieci to wyrzucamy wyjatek raise TypeError, arg