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],
]
list(zip(*filter(any, zip(*filter(any, matrix)))))
def trim(matrix):
fltr = lambda matrix: zip(*filter(any, matrix))
return [list(row) for row in fltr(fltr(matrix))]
matrix = trim(matrix)
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)])]
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]])