[Numpy-discussion] trim_zeros in more than one dimension?
Wed Apr 21 10:34:40 CDT 2010
On 04/21/2010 08:36 AM, Robert Kern wrote:
> On Tue, Apr 20, 2010 at 18:45, Charles R Harris
> <firstname.lastname@example.org> wrote:
>> On Tue, Apr 20, 2010 at 7:03 AM, Andreas Hilboll<email@example.com> 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 ...
>> I think for your application it would be easier to use a subarray, something
>> like a[1:-1, 1:-1].
> Yes, but I think he's asking for a function that will find the
> appropriate slices for him, justl like trim_zeros() does for 1D
If the sum of axis to be removed equals zero then you can conditionally
remove that axis. For 2-d you can do:
import numpy as np
ba=np.array([[0,0,0], [1,2, 0], [3,4, 0], [0,0,0]])
ndx0=ba.sum(axis=0)>0 #indices of axis 0 where the sum is greater than zero
ndx1=ac.sum(axis=1)>0 #indices of axis 1 where the sum is greater than zero
array([[0, 0, 0],
[1, 2, 0],
[3, 4, 0],
[0, 0, 0]])
If the sum of an dimension is also zero somewhere else in the array then
you need to correct the appropriate index first (which is why I created
a separate variable). Obviously higher dimensions are left untested.
More information about the NumPy-Discussion