matrix Multiplication
hi evrybody! I wan't to multiply two square matrixes, and i don't understand why it doesn't work. Could you explain me? def multmat(A,B): A*B if len(A)!=len(B): return error D=[] C=[] for i in range(len(A)): D.append(0) for i in range(len(A)): C.append(D) for i in range(len(A)): for j in range(len(A)): for k in range(len(A)): C[i][j]+=A[i][k]*B[k][j] print C[i][j] print C[i] return C when i use it on : A=[[2,3,4],[5,8,6],[4,5,7]] B=[[1,0,0],[0,1,0],[0,0,1]] I get : 2 2 2 0 3 3 0 0 4 [2, 3, 4] 7 7 7 3 11 11 4 4 10 [7, 11, 10] 11 11 11 11 16 16 10 10 17 [11, 16, 17] [[11, 16, 17], [11, 16, 17], [11, 16, 17]] thank you -- http://mail.python.org/mailman/listinfo/python-list
Re: matrix Multiplication
Fredrik Lundh wrote: Sssasss wrote: I wan't to multiply two square matrixes, and i don't understand why it doesn't work. def multmat(A,B): A*B if len(A)!=len(B): return error D=[] C=[] for i in range(len(A)): D.append(0) for i in range(len(A)): C.append(D) append doesn't copy data, so you're basically adding len(A) references to the same D list to C. for more on this, see: http://pyfaq.infogami.com/how-do-i-create-a-multidimensional-list /F Ok!! Tank you very much, i understand now. ciao -- http://mail.python.org/mailman/listinfo/python-list
Re: matrix Multiplication
David wrote: Il 18 Oct 2006 04:17:29 -0700, Sssasss ha scritto: hi evrybody! I wan't to multiply two square matrixes, and i don't understand why it doesn't work. Can I suggest a little bit less cumbersome algorithm? def multmat2(A,B): A*B if len(A)!=len(B): return error # this check is not enough! n = range(len(A)) C = [] for i in n: C.append([0]*len(A)) # add a row to C for j in n: a = A[i]# get row i from A b = [row[j] for row in B] # get col j from B C[i][j] = sum([x*y for x,y in zip(a,b)]) return C regards D. This one is really nice, i didn't knew the zip function, thank you ciao -- http://mail.python.org/mailman/listinfo/python-list
Re: matrix Multiplication
Roberto Bonvallet wrote: Sssasss wrote: hi evrybody! I wan't to multiply two square matrixes, and i don't understand why it doesn't work. Could you explain me? def multmat(A,B): A*B if len(A)!=len(B): return error Wrong validation here: you _can_ multiply two matrices with a different number of rows! And instead of returning error you should raise an exception. [...] I suggest using a linear algebra package, but if you insist in using lists of lists: b = [[1, 2, 3, 4], ... [4, 5, 6, 7], ... [7, 8, 9, 10]] a = [[1, 2, 3], ... [4, 5, 6]] ab = [[sum(i*j for i, j in zip(row, col)) for col in zip(*b)] for row in a] ab [[30, 36, 42, 48], [66, 81, 96, 111]] Straightforward from the definition of matrix multiplication. -- Roberto Bonvallet Thank you, this one is very short! yes of course we can multiply different kinds of matrices, bu since I'm starting with python i started with something quick. ciao -- http://mail.python.org/mailman/listinfo/python-list