'Unable to access float object in a 2D array in Python

I need to return the vector solution x of Ux = b for an upper triangular matrix U and vector b using back substitution, but I'm unable to actually access an element of the matrix U.

def BackSub(U, b):
 n = len(U)
  x = [0 for i in range(n)]
  for i in range(n - 1, -1, -1):
    s = 0
    for j  in range(n - 1, i, -1):
      s += (U[i][j])*b[j]
    b[i] = (b[i] - s)/(U[i][i])
  return b

b = [5, 6, 3, 2]
U = [[ 1, 2, 1, 0],
 [ 0, 3, -5, 9],
 [ 0, 0, 0.5, 1],
 [ 0, 0, 0, 7]]

N = GaussElim(U, b)
x = BackSub(N, b)

It returns TypeError: 'float' object is not subscriptable for U[i][i] The GaussElim function is this

import numpy as np
def GaussElim(A, b):
  n = len(b) #n is matrix size

  #Elimination phase
  for k in range(0 , n - 1): #k is matrix row
    for i in range(k + 1, n): #i is matrix col
      if A[i][k] != 0:
        factor = A[i][k]/ A[k][k]
        A[i][k + 1 : n] = A[i][k + 1 : n] - np.multiply(factor, A[k][k + 1 : n])
        b[i] = b[i] - np.multiply(factor, b[k])

  #Back substitution
  for k in range(n - 1, -1, -1):
    b[k] = (b[k] - dot(A[k][k + 1 : n], b[k + 1 : n]))/A[k][k]

  return b


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source