matrix Multiplication

2006-10-18 Thread Sssasss
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

2006-10-18 Thread Sssasss

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

2006-10-18 Thread Sssasss

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

2006-10-18 Thread Sssasss

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