Это было бы что-то вроде:

аюсь удалить строку 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.

Ответы на вопрос(2)

Ваш ответ на вопрос