Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,56 @@
|
|||
>>> 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
|
||||
>>>
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
class Mat(list) :
|
||||
def __matmul__(self, B) :
|
||||
A = self
|
||||
return Mat([[sum(A[i][k]*B[k][j] for k in range(len(B)))
|
||||
for j in range(len(B[0])) ] for i in range(len(A))])
|
||||
|
||||
|
||||
def identity(size):
|
||||
size = range(size)
|
||||
return [[(i==j)*1 for i in size] for j in size]
|
||||
|
||||
def power(F, n):
|
||||
result = Mat(identity(len(F)))
|
||||
b = Mat(F)
|
||||
while n > 0:
|
||||
if (n%2) == 0:
|
||||
b = b @ b
|
||||
n //= 2
|
||||
else:
|
||||
result = b @ result
|
||||
b = b @ b
|
||||
n //= 2
|
||||
return result
|
||||
|
||||
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(power(m, i))
|
||||
Loading…
Add table
Add a link
Reference in a new issue