Matrix multiplication
August 17, 2014 Leave a comment
This is simplified code that multiplies two matrices – a and b – using data stored in a file.
["a", 0, 0, 63] ["a", 0, 1, 45] ["a", 0, 2, 93] ["a", 0, 3, 32] ["a", 0, 4, 49] ["a", 1, 0, 33] ["a", 1, 3, 26] ["a", 1, 4, 95] ["a", 2, 0, 25] ["a", 2, 1, 11] ["a", 2, 3, 60] ["a", 2, 4, 89] ["a", 3, 0, 24] ["a", 3, 1, 79] ["a", 3, 2, 24] ["a", 3, 3, 47] ["a", 3, 4, 18] ["a", 4, 0, 7] ["a", 4, 1, 98] ["a", 4, 2, 96] ["a", 4, 3, 27] ["b", 0, 0, 63] ["b", 0, 1, 18] ["b", 0, 2, 89] ["b", 0, 3, 28] ["b", 0, 4, 39] ["b", 1, 0, 59] ["b", 1, 1, 76] ["b", 1, 2, 34] ["b", 1, 3, 12] ["b", 1, 4, 6] ["b", 2, 0, 30] ["b", 2, 1, 52] ["b", 2, 2, 49] ["b", 2, 3, 3] ["b", 2, 4, 95] ["b", 3, 0, 77] ["b", 3, 1, 75] ["b", 3, 2, 85] ["b", 4, 1, 46] ["b", 4, 2, 33] ["b", 4, 3, 69] ["b", 4, 4, 88]
I loaded this data in a dict so that the keys are the tuples(row,column).
for x in sorted(matrixa.items()): print x
((0, 0), 63) ((0, 1), 45) ((0, 2), 93) ((0, 3), 32) ((0, 4), 49) ((1, 0), 33) ((1, 3), 26) ((1, 4), 95) ((2, 0), 25) ((2, 1), 11) ((2, 3), 60) ((2, 4), 89) ((3, 0), 24) ((3, 1), 79) ((3, 2), 24) ((3, 3), 47) ((3, 4), 18) ((4, 0), 7) ((4, 1), 98) ((4, 2), 96) ((4, 3), 27)
It is a sparse matrix. So all the values may not be there. The code has to check that.
l = [] for i in range(0,5): for j in range(0,5): for k in range(0,5): if (i,k) in matrixa: x = matrixa[(i,k)] else: x = 0 if (k,j) in matrixb: y = matrixb[(k,j)] else: y = 0 z += x * y l.append([i,j,z]) z = 0 for i in l: print i
The result is this.
[0, 0, 11878] [0, 1, 14044] [0, 2, 16031] [0, 3, 5964] [0, 4, 15874] [1, 0, 4081] [1, 1, 6914] [1, 2, 8282] [1, 3, 7479] [1, 4, 9647] [2, 0, 6844] [2, 1, 9880] [2, 2, 10636] [2, 3, 6973] [2, 4, 8873] [3, 0, 10512] [3, 1, 12037] [3, 2, 10587] [3, 3, 2934] [3, 4, 5274] [4, 0, 11182] [4, 1, 14591] [4, 2, 10954] [4, 3, 1660] [4, 4, 9981]