Это было бы что-то вроде:
аюсь удалить строку i и столбец i, когда строка iа также столбец I содержит все 0. Например, в этом случае мы можем видеть, что строка 0 - все нули, а столбец 0 - все нули, и, таким образом, строка и столбец 0 удаляются. То же самое с парой столбцов строки 2 и 4. Строка 1 - все нули, но столбец 1 - нет, поэтому ни один из них не удаляется.
[0,0,0,0,0]
[0,1,0,1,0]
[0,0,0,0,0]
[0,0,0,0,0]
[0,0,0,0,0]
станет
[1,1]
[0,0]
Другой пример:
[0,0,1,0,0,1]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,0,0,0,0]
[0,0,1,0,1,0]
изменится на:
[0,1,0,1]
[0,0,0,0]
[0,0,0,0]
[0,1,1,0]
Это код, который я использую для вычисления:
def remove(matrix):
for i, x in reversed(list(enumerate(matrix))):
if np.all(matrix == 0, axis=0)[i] and np.all(matrix == 0, axis=1)[i]:
matrix = np.delete(matrix,i,axis=0)
matrix = np.delete(matrix,i,axis=1)
return matrix
После тестирования эта линия занимает больше всего времени:
if np.all(matrix == 0, axis=0)[i] and np.all(matrix == 0, axis=1)[i]:
Есть ли более подходящий способ проверить строку и столбец таким образом? Матрица, которую я использую, является разреженной двоичной матрицей. Я не использую разреженные матричные классы, только ndarray.