Advertisement
Pietu1998

Matrix Determinant

Dec 8th, 2014
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.80 KB | None | 0 0
  1. def det_golf(m):
  2.     side = int(len(m)**.5)
  3.     fac = lambda n:(lambda f,a:f(f,a))(lambda f,a:a*f(f,a-1)if a else 1,n)
  4.     poista = lambda t,i:t[:i]+t[i+1:]
  5.     perm = lambda m,i:(lambda f,*a:f(f,*a))(lambda f,m,i:[m[i//fac(len(m)-1)]]+f(f,poista(m,i//fac(len(m)-1)),i%fac(len(m)-1))if m else [],m,i-1)
  6.     sign = lambda m,p:(lambda f,*a:f(f,*a))(lambda f,m,p:1if len(p)<2else-f(f,m[1:],p[1:p.index(m[0])]+[p[0]]+p[p.index(m[0])+1:])if m[0]-p[0]else f(f,m[1:],p[1:]),m,p)
  7.     prod = lambda t:print(t)or(lambda f,a:f(f,a))(lambda f,a:a[0]*f(f,a[1:])if a else 1,t)
  8.     mat = list(range(side))
  9.     for n in range(fac(len(mat))):print(perm(mat,n+1), sign(mat,perm(mat,n+1)))
  10.     det = sum(sign(mat,perm(mat,n+1))*prod(list(m[i+side*perm(mat,n+1)[i]]for i in range(side)))for n in range(fac(side)))
  11.     return det
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement