В трехмерном массиве NumPy [строка x col x ch], дополненном NaN, например,
>>> a = np.ones((5, 5, 3))
>>> a[0, :, 0] = np.nan
>>> a[:, 0:2, :] = np.nan
>>> a[4, 4, 0] = np.nan
>>> a[:, :, 0]
array([[nan, nan, nan, nan, nan],
[nan, nan, 1., 1., 1.],
[nan, nan, 1., 1., 1.],
[nan, nan, 1., 1., 1.],
[nan, nan, 1., 1., nan]])
>>> a.shape
(5, 5, 3)
, как обрезать все строки и столбцы, содержащие NaN в любом канале от границы?
В моем примере я хочу получить массив
>>> a_cropped[:, :, 0]
array([[1., 1.],
[1., 1.],
[1., 1.]])
>>> a_cropped.shape
(3, 2, 3)
Это связано с этим вопросом .Тем не менее, я прекрасно справляюсь с тем, что могу выделить только прямоугольную область в центре, которая может быть однозначно извлечена.
Я предполагаю, что сначала мне нужно чередовать ограничивающие строки и столбцы один за другим, чтобы не удалять "допустимые" области.
Контекст: Поворот изображения и удаление областей с добавлением NaN за пределами действительной области изображения, показанные на следующем рисунке черными пикселями.