#!/usr/local/bin/python
# $Id: matrix.python,v 1.5 2001/05/09 01:24:52 doug Exp $
# http://www.bagley.org/~doug/shootout/
# This program based on the original from:
# "The What, Why, Who, and Where of Python" By Aaron R. Watters
# http://www.networkcomputing.com/unixworld/tutorial/005/005.html
# modified to pass rows and cols, and avoid matrix size checks
# and added one optimization to reduce subscripted references in
# inner loop.
**import** sys
size = 30
**def** mkmatrix(rows, cols):
count = 1
mx = [ **None** ] * rows
**for** i **in** **range**(rows):
mx[i] = [0] * cols
**for** j **in** **range**(cols):
mx[i][j] = count
count += 1
**return** mx
**def** mmult(rows, cols, m1, m2):
m3 = [ **None** ] * rows
**for** i **in** **range**( rows ):
m3[i] = [0] * cols
**for** j **in** **range**( cols ):
val = 0
**for** k **in** **range**( cols ):
val += m1[i][k] * m2[k][j]
m3[i][j] = val
**return** m3
**def** mxprint(m):
**for** i **in** **range**(size):
**for** j **in** **range**(size):
**print** m[i][j],
**print** ""
**def** main():
iter = **int**(sys.argv[1])
m1 = mkmatrix(size, size)
m2 = mkmatrix(size, size)
**for** i **in** xrange(iter):
mm = mmult(size, size, m1, m2)
**print** mm[0][0], mm[2][3], mm[3][2], mm[4][4]
main()