@pcdesign

Как убрать нулевые строки и колонки из двух-мерной матрицы?

result = [
       [0,4,0,1,0],
       [0,0,2,3,0],
       [0,0,3,1,0],
       [0,0,0,0,0],
]

Чтобы получилось:
result = [
       [4,0,1],
       [0,2,3],
       [0,3,1],
]
  • Вопрос задан
  • 368 просмотров
Решения вопроса 2
adugin
@adugin Куратор тега Python
list(zip(*filter(any, zip(*filter(any, matrix)))))

UPD Вынесу из комментов окончательный вариант:
def trim(matrix):
    fltr = lambda matrix: zip(*filter(any, matrix))
    return [list(row) for row in fltr(fltr(matrix))]

matrix = trim(matrix)
Ответ написан
@AlexandrBirukov
без сторонних либ

start = [
    [0, 4, 0, 1, 0],
    [0, 0, 2, 3, 0],
    [0, 0, 3, 1, 0],
    [0, 0, 0, 0, 0],
]
result = [list(t) for t in zip(*[i for i in zip(*[x for x in start if any(x)]) if any(i)])]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
С Python только разбираюсь, ответ не претендует на оптимальность.

import numpy as np

def noZeros(a):
    arr = np.array(a)
    rows = arr[ ~np.all(arr == 0, axis = 1)]
    colsTrue = ~np.all(rows == 0, axis = 0)
    return rows[:, colsTrue == True]

a = [
       [0,4,0,1,0],
       [0,0,2,3,0],
       [0,0,3,1,0],
       [0,0,0,0,0],
]

noZeros(a)


Результат:
array([[4, 0, 1],
       [0, 2, 3],
       [0, 3, 1]])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы