Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.07 KB | None | 0 0
  1. import numpy as np
  2. import sys
  3. import scipy.linalg
  4. import sympy
  5.  
  6.  
  7. # c = 0
  8. # for number, line in enumerate(sys.stdin):
  9. #     if number == 0:
  10. #         q = line.split(' ')[1]
  11. #     if number == 1:
  12. #         type_mat = line
  13. #     if number > 1:
  14. #         if c == 0:
  15. #             line = line.split('\n')[0]
  16. #             matrix = list(map(int, line))
  17. #             matrix = np.mat(matrix)
  18. #             c += 1
  19. #         else:
  20. #             line = line.split('\n')[0]
  21. #             line_mat = list(map(int, line))
  22. #             matrix = np.vstack((matrix, line_mat))
  23.  
  24. def gjel(A, p):
  25.     """Gauss-Jordan elimination."""
  26.     nulldim = 0
  27.     for i, row1 in enumerate(A):
  28.         pivot = A[i:, i].argmax() + i
  29.         if A[pivot, i] == 0:
  30.             nulldim = (len(A) - i) % p #####
  31.             break
  32.         new_row = (A[pivot] * A[pivot, i]) % p #####
  33.         A[pivot] = A[i]
  34.         row1[:] = new_row
  35.        
  36.         for j, row2 in enumerate(A):
  37.             if j == i:
  38.                 continue
  39.             row2[:] = (row2[:] - new_row*A[j, i]) % p ####
  40.     return A, nulldim
  41.  
  42. def transforms(matrix, field):
  43.     k, n = matrix.shape
  44.     matrix = gjel(matrix, p=field)[0]
  45.     new_matrix = np.hstack((-matrix[:,k:].T, np.diag([1]*(n-k))) ) % field
  46.    
  47.     return new_matrix
  48.  
  49.  
  50. matrix = np.mat([ [0,0,0,1,1,1,1],
  51.            [0,1,1,0,0,1,1],
  52.            [1,0,1,0,1,0,1]])
  53. type_mat = 'parity 1'
  54.  
  55. q = int(2)
  56.  
  57. if type_mat.split(' ')[0] == 'parity':
  58.     H = matrix
  59.     G = transforms(matrix=matrix, field=q)
  60.     d = len(sympy.Matrix(H).T.rref()[1])
  61.     print('distance: ' + str(d))
  62.     print('generator matrix:')
  63.     for strng in range(G.shape[0]):
  64.         print(''.join([str(i) for i in np.array(G[strng]).flatten()]))
  65.    
  66.    
  67.    
  68. if type_mat.split(' ')[0] == 'generator':
  69.     G = matrix
  70.     H = transforms(matrix=matrix, field=q)
  71.     d = len(sympy.Matrix(H).T.rref()[1])
  72.     print('distance: ' + str(d))
  73.     print('parity check matrix:')    
  74.     for strng in range(H.shape[0]):
  75.         print(''.join([str(i) for i in np.array(H[strng]).flatten()]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement