Предположим, у нас есть матрица:
a = array([[ 2., 3., 0., 0., 0.],
[ 0., 4., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
, что является наилучшим способом найти максимальную ненулевую матрицу (т.е. матрицу, которая не является полностью нулевой) и охватывает все элементы, например
[[2.,3.],
[0.,4.]]
Я прошел numpy.nonzero, который дает индексы ненулевых элементов, но как я могу эффективно использовать его для получения ожидаемой матрицы?
матрица должна быть квадратной.Сейчас я придумаю это,
a[:np.nonzero(a)[0][-1]+1,:np.nonzero(a)[1][-1]+1]
Это работает.Но не кажется элегантным.Также он не будет работать, если матрица не начинается с 0. Например,
[[0,0,2,3,0],
[0,0,0,4,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0]]
здесь ожидаемый результат равен
[[2,3],
[0,4]]