Определение ранга матрицы без встроенных функций на Python

Пишу алгоритм поиска ранга матрицы без использования встроенной функции в numpy, но пока что не выходит. Помогите, пожалуйста, найти ошибку. Код откомментировал, насколько это возможно.

import numpy as np
a = np.array([[1, 1, 1, 1],
              [0, 0, 1, 1],
              [0, 0, 1, 1],
              [0, 0, 1, 1]])
#Копия исходной матрицы
b = np.copy(a)
#Количество нулевых строк
count = 0
#Вспомогательная переменная - индикатор,
#была ли найдена строка с ненулевым элементом
key = True
#Проходим по строкам матрицы и приводим матрицу к трапецевидной
for k in range(a.shape[0]):
      #Если элемент на главной диагонали в исходной
      #строке - нуль, то ищем строку, где элемент
      #того же столбца не нулевой, и меняем строки
      #местами, или, если такую строку найти не удалось,
      #прерываем цикл
      if (b[k][k] == 0):
           key = False
           #Идём по строкам, расположенным ниже исходной
           for i in range(k+1, a.shape[0]):
                  #Если нашли строку, где в том же столбце имеется не нулевой элемент
                  if (b[i][k] != 0):
                        key = True
                        #Меняем найденную и исходную строки местами (функция самописная)
                        b = swap(b, k, i)
                        break
      #Если на каком-то этапе не нашли столбца с ненулевыми элементами
      #ниже k-ой позиции - прерываем цикл        
      if (key == False):
            break

      #Идём по строкам, которые расположены ниже исходной
      for i in range(k+1, a.shape[0]):
            
            multi = b[i][k] / b[k][k]

            for j in range(a.shape[1]):
                 
                 b[i][j] -= multi*b[k][j]
#Считаем количество нулевых строк
for i in range(a.shape[0]):
      key = False
      for j in range(a.shape[1]):
            if b[i][j] != 0:
              key = True
      if (key == False):
        count+=1
print(a.shape[0] - count)

Ответы (0 шт):