57 lines
875 B
Python
57 lines
875 B
Python
>>> from operator import mul
|
|
>>> def matrixMul(m1, m2):
|
|
return map(
|
|
lambda row:
|
|
map(
|
|
lambda *column:
|
|
sum(map(mul, row, column)),
|
|
*m2),
|
|
m1)
|
|
|
|
>>> def identity(size):
|
|
size = range(size)
|
|
return [[(i==j)*1 for i in size] for j in size]
|
|
|
|
>>> def matrixExp(m, pow):
|
|
assert pow>=0 and int(pow)==pow, "Only non-negative, integer powers allowed"
|
|
accumulator = identity(len(m))
|
|
for i in range(pow):
|
|
accumulator = matrixMul(accumulator, m)
|
|
return accumulator
|
|
|
|
>>> def printtable(data):
|
|
for row in data:
|
|
print ' '.join('%-5s' % ('%s' % cell) for cell in row)
|
|
|
|
|
|
>>> m = [[3,2], [2,1]]
|
|
>>> for i in range(5):
|
|
print '\n%i:' % i
|
|
printtable( matrixExp(m, i) )
|
|
|
|
|
|
|
|
0:
|
|
1 0
|
|
0 1
|
|
|
|
1:
|
|
3 2
|
|
2 1
|
|
|
|
2:
|
|
13 8
|
|
8 5
|
|
|
|
3:
|
|
55 34
|
|
34 21
|
|
|
|
4:
|
|
233 144
|
|
144 89
|
|
>>> printtable( matrixExp(m, 10) )
|
|
1346269 832040
|
|
832040 514229
|
|
>>>
|