Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def my_det(X):
- '''
- Parameters
- ----------
- X : array_like
- Returns
- -------
- det : float
- Determinant of `a`.
- '''
- # Your code here
- X1 = X.copy()
- if X1.shape[0] != X1.shape[1]:
- raise ValueError('Not square')
- det = 1
- for j in range(X1.shape[1]):
- k = j
- for i in range(j + 1, X1.shape[0]):
- if abs(X1[i, j]) > abs(X1[k, j]):
- k = j
- if X1[k, j] == 0:
- det = 0
- return 0
- if X1[j, j] == 0:
- det = 0
- return 0
- X1[k,:], X1[j,:] = X1[j,:].copy(), X1[k,:].copy()
- if k != j:
- det = -det
- try:
- det *= X1[j, j]
- except RuntimeError:
- return 0
- if abs(det) < 1e-7:
- return 0
- for i in range(j + 1, X1.shape[0]):
- try:
- X1[j, i] /= X1[j, j]
- except RuntimeError:
- return inf
- for i in range(X1.shape[0]):
- tmp = X1[i, j]
- if j != i and X1[i, j] != 0:
- X1[i,j+1:] -= X1[j,j+1:] * tmp
- #for k in range(j + 1, X1.shape[0]):
- # X1[i, k] -= X1[j, k] * X1[i, j]
- return det
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement