Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > matrix Multiplication

Reply
Thread Tools

matrix Multiplication

 
 
Sssasss
Guest
Posts: n/a
 
      10-18-2006
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

 
Reply With Quote
 
 
 
 
Fredrik Lundh
Guest
Posts: n/a
 
      10-18-2006
"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-c...mensional-list

</F>



 
Reply With Quote
 
 
 
 
Sssasss
Guest
Posts: n/a
 
      10-18-2006

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-c...mensional-list
>
> </F>


Ok!! Tank you very much, i understand now.

ciao

 
Reply With Quote
 
Gerrit Holl
Guest
Posts: n/a
 
      10-18-2006
On 2006-10-18 14:15:17 +0200, Sssasss wrote:
> 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-c...mensional-list
> >
> > </F>

>
> Ok!! Tank you very much, i understand now.


You might also want to look at numpy/numarray.

Gerrit.
 
Reply With Quote
 
David
Guest
Posts: n/a
 
      10-18-2006
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.
 
Reply With Quote
 
Roberto Bonvallet
Guest
Posts: n/a
 
      10-18-2006
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
 
Reply With Quote
 
Sssasss
Guest
Posts: n/a
 
      10-18-2006

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

 
Reply With Quote
 
Sssasss
Guest
Posts: n/a
 
      10-18-2006

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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
where can I find good samples for efficient computation of matrix multiplication? walala VHDL 2 03-24-2010 10:06 AM
Source of term "multiplication" in matrix multiplication William Hughes C Programming 13 03-15-2010 02:04 PM
Segmentation fault in Matrix Multiplication amitnanda@gmail.com C Programming 14 01-26-2006 09:35 PM
Performance issue: matrix multiplication in C and C++ Michael Bader C++ 11 03-03-2004 09:30 AM
matrix multiplication robix C Programming 3 11-13-2003 12:17 AM



Advertisments