Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. def rref(matrix, augment=None):
  2.     def row_swap(i, j):
  3.         matrix[i,:], matrix[j,:] = matrix[j,:], matrix[i,:].copy()
  4.         augment[i,:], augment[j,:] = augment[j,:], augment[i,:].copy()
  5.     def row_xor(i, j):
  6.         matrix[i,:] = matrix[i,:] ^ matrix[j,:]
  7.         augment[i,:] = augment[i,:] ^ augment[j,:]
  8.     matrix = matrix.copy()
  9.     if augment is None:
  10.         augment = np.matrix(np.zeros(matrix.shape), dtype=dt)
  11.     else:
  12.         augment = augment.copy()
  13.     height, width = matrix.shape
  14.     pivots = []
  15.     print("reducing")
  16.     for i in range(width):
  17.         col = matrix[:,i]
  18.         pivot_row = len(pivots)
  19.         if pivot_row >= height:
  20.             break
  21.         if col.take(pivot_row) == 0:
  22.             nonzeros = col.flat[pivot_row:].nonzero()[1]
  23.             if len(nonzeros) == 0:
  24.                 continue
  25.             else:
  26.                 row_swap(pivot_row, pivot_row + nonzeros[0])
  27.         pivots.append(i)
  28.         nonzeros = col.nonzero()[0]
  29.         for nonzero in nonzeros:
  30.             if nonzero != pivot_row:
  31.                 row_xor(nonzero, pivot_row)
  32.     return matrix, augment
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement