boîte englobante d'un tableau numpy

Supposons que vous avez un 2D tableau numpy avec certaines valeurs aléatoires et environnant les zéros.

Exemple "incliné rectangle":

import numpy as np
from skimage import transform

img1 = np.zeros((100,100))
img1[25:75,25:75] = 1.
img2 = transform.rotate(img1, 45)

Maintenant, je veux trouver le plus petit rectangle englobant pour tous les non-nulle de données. Par exemple:

a = np.where(img2 != 0)
bbox = img2[np.min(a[0]):np.max(a[0])+1, np.min(a[1]):np.max(a[1])+1]

Quel serait le plus rapide moyen de parvenir à ce résultat? Je suis sûr qu'il ya une meilleure façon de faire depuis le np.où la fonction prend un peu de temps et si je suis par exemple à l'aide de 1000x1000 ensembles de données.

Edit: il Devrait également travailler en 3D...

OriginalL'auteur a.smiet | 2015-07-14