Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import sys
- import scipy.linalg
- import sympy
- # c = 0
- # for number, line in enumerate(sys.stdin):
- # if number == 0:
- # q = line.split(' ')[1]
- # if number == 1:
- # type_mat = line
- # if number > 1:
- # if c == 0:
- # line = line.split('\n')[0]
- # matrix = list(map(int, line))
- # matrix = np.mat(matrix)
- # c += 1
- # else:
- # line = line.split('\n')[0]
- # line_mat = list(map(int, line))
- # matrix = np.vstack((matrix, line_mat))
- def gjel(A, p):
- """Gauss-Jordan elimination."""
- nulldim = 0
- for i, row1 in enumerate(A):
- pivot = A[i:, i].argmax() + i
- if A[pivot, i] == 0:
- nulldim = (len(A) - i) % p #####
- break
- new_row = (A[pivot] * A[pivot, i]) % p #####
- A[pivot] = A[i]
- row1[:] = new_row
- for j, row2 in enumerate(A):
- if j == i:
- continue
- row2[:] = (row2[:] - new_row*A[j, i]) % p ####
- return A, nulldim
- def transforms(matrix, field):
- k, n = matrix.shape
- matrix = gjel(matrix, p=field)[0]
- new_matrix = np.hstack((-matrix[:,k:].T, np.diag([1]*(n-k))) ) % field
- return new_matrix
- matrix = np.mat([ [0,0,0,1,1,1,1],
- [0,1,1,0,0,1,1],
- [1,0,1,0,1,0,1]])
- type_mat = 'parity 1'
- q = int(2)
- if type_mat.split(' ')[0] == 'parity':
- H = matrix
- G = transforms(matrix=matrix, field=q)
- d = len(sympy.Matrix(H).T.rref()[1])
- print('distance: ' + str(d))
- print('generator matrix:')
- for strng in range(G.shape[0]):
- print(''.join([str(i) for i in np.array(G[strng]).flatten()]))
- if type_mat.split(' ')[0] == 'generator':
- G = matrix
- H = transforms(matrix=matrix, field=q)
- d = len(sympy.Matrix(H).T.rref()[1])
- print('distance: ' + str(d))
- print('parity check matrix:')
- for strng in range(H.shape[0]):
- print(''.join([str(i) for i in np.array(H[strng]).flatten()]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement