Я создал объектную матрицу, которая обрабатывает две матрицы: self.matrix_original
, которая является матрицей, загруженной из файла, и self.new_matrix
, которая сначала клонируется из исходной, а затем сделала некоторые операции над ней. Я также использую два метода: self.deleteRepetition()
и delete10()
. Первый - для удаления повторяющихся строк, второй - для удаления столбцов, созданных только с единицами и нулями.
def deleteRepetition(self):
matrix = self.matrix_original.copy()
for i, row in enumerate(matrix):
index = matrix.index(row)
matrix[index+1:] = (value for value in matrix[index+1:] if value != row)
self.new_matrix = matrix.copy()
self.n_dim[0] = len(matrix)
self.n_dim[1] = len(matrix[0])
def delete10(self):
matrix = self.new_matrix.copy()
columns = list(range(len(matrix[0])))
columns_to_delete = []
for i, cell in enumerate(matrix[0]):
suma = 0
for x, row in enumerate(matrix):
if row[i] == cell:
suma = suma + 1
if suma == len(matrix):
columns_to_delete.append(i)
self.deletedColumns = columns_to_delete.copy()
columns_to_delete.reverse()
for i in columns_to_delete:
columns.pop(columns.index(i))
for x, row in enumerate(matrix):
matrix[x].pop(i)
self.n_dim[0] = len(matrix[0])
self.n_dim[1] = len(matrix)
self.new_matrix = matrix.copy()
return columns
Первый метод удаляет повторение строк, а второй - для удаления столбцов, созданных только с единицами и нулями.
Так что после запуска программы перед вызовом любого из методов она выглядит нормально. У меня есть оригинальная и новая матрица, загруженная правильно:
Затем я звоню deleteRepetition()
:
Все выглядит хорошо. Исходная матрица такая же, как и раньше, а новая уменьшена. Поэтому я пытаюсь позвонить delete10()
. Он выполняет работу по сокращению новой матрицы, но оригинальная искажается в процессе, подобном этому:
Может кто-нибудь определить, где ошибка? В delete10()
я использую матрицу, которую я скопировал через <matrix>.copy()
, так что она не должна так работать, верно?