[Numpy-discussion] trim_zeros in more than one dimension?

Keith Goodman kwgoodman at gmail.com
Tue Apr 20 11:32:12 EDT 2010


On Tue, Apr 20, 2010 at 6:03 AM, Andreas Hilboll <lists at hilboll.de> wrote:
> Hi there,
>
> is there an easy way to do something like trim_zeros() does, but for a
> n-dimensional array? I have a 2d array with only zeros in the first and
> last rows and columns, and would like to trim this array to only the
> non-zero part ...
>
> Thanks,
>
> Andreas.

I have some code that does something similar for NaNs.

Create an array:

>> x = np.arange(12, dtype=float).reshape(3,4)
>> x[[0,-1],:] = np.nan
>> x[:,[0,-1]] = np.nan
>> x
array([[ NaN,  NaN,  NaN,  NaN],
       [ NaN,   5.,   6.,  NaN],
       [ NaN,  NaN,  NaN,  NaN]])

Use the la package to convert the array to a labeled array:

>> y = la.larry(x)

Then remove all rows and columns that contain only NaN:

>> y.vacuum().A
   array([[ 5.,  6.]])

or

>> y.vacuum().squeeze().A
   array([ 5.,  6.])

It should work for arbitrary number of dimensions.

The code (Simplified BSD License) is here:

http://bazaar.launchpad.net/~kwgoodman/larry/trunk/annotate/head%3A/la/deflarry.py



More information about the NumPy-Discussion mailing list