Python bug? Indexing to matrices
David
davidbtdt at gmail.com
Tue Jul 12 01:39:55 EDT 2011
Should the following line work for defining a matrix with zeros?
c= [[0]*col]*row
where "col" is the number of columns in the matrix and "row" is of
course the number of rows.
If this a valid way of initializing a matrix in Python 3.2.1, then it
appears to me that a bug surfaces in Python when performing this line:
c[i][j] = c[i][j] + a[i][k] * b[k][j]
It writes to the jth column rather than just the i,j cell.
I'm new at Python and am not sure if I'm just doing something wrong if
there is really a bug in Python. The script works fine if I
initialize the matrix with numpy instead:
c = np.zeros((row,col))
So, I know my matrix multiply algorithm is correct (I know I could use
numpy for matrix multiplication, this was just to learn Python).
I've attached my source code below.
TIA,
David
-----
#!python
# dot.py - Matrix multiply in matricies: [c] = [a] * [b]
import numpy as np
a = [[3, 7], [-2, 1], [2, 4]]
b = [[2, 1, -3, 1], [4, 3, -2, 3]]
print("a = {0}, b = {1}".format(a,b))
row = len(a)
col = len(b[0])
#c = np.zeros((row,col)) # <----- Correct results when using this
line
c= [[0]*col]*row # <----- Incorrect results when using
this line
print(c)
for i in range(row): # Index into rows of [a]
for j in range(col): # Index into columns of [b]
c[i][j] = 0
for k in range(len(b)): # Index into columns of [a] and rows of [b]
print("c[{0}][{1}] + a[{2}][{3}] * b[{4}][{5}] = {6} + {7} *
{8}".format(i,j,i,k,k,j,c[i][j],a[i][k],b[k][j]))
c[i][j] = c[i][j] + a[i][k] * b[k][j]
print(c)
More information about the Python-list
mailing list