matrix.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import sympy
  2. import sys
  3. assert sys.version_info >= (3, 5)
  4. def dot(left, right):
  5. assert(isinstance(left, sympy.Matrix))
  6. assert(isinstance(right, sympy.Matrix))
  7. sum = 0
  8. for c in range(0, left.cols):
  9. for r in range(0, left.rows):
  10. sum += left[r, c] * right[r, c]
  11. return sum
  12. def squared_norm(m):
  13. assert(isinstance(m, sympy.Matrix))
  14. return dot(m, m)
  15. def Vector2(x, y):
  16. return sympy.Matrix([x, y])
  17. def ZeroVector2():
  18. return Vector2(0, 0)
  19. def Vector3(x, y, z):
  20. return sympy.Matrix([x, y, z])
  21. def ZeroVector3():
  22. return Vector3(0, 0, 0)
  23. def Vector6(a, b, c, d, e, f):
  24. return sympy.Matrix([a, b, c, d, e, f])
  25. def ZeroVector6():
  26. return Vector6(0, 0, 0, 0, 0, 0)
  27. def proj(v):
  28. m, n = v.shape
  29. assert m > 1
  30. assert n == 1
  31. l = [v[i] / v[m - 1] for i in range(0, m - 1)]
  32. r = sympy.Matrix(m - 1, 1, l)
  33. return r
  34. def unproj(v):
  35. m, n = v.shape
  36. assert m >= 1
  37. assert n == 1
  38. return v.col_join(sympy.Matrix.ones(1, 1))