# [Numpy-discussion] taking a 2D uneven surface slice

Benjamin Root ben.root at ou.edu
Wed Dec 3 20:32:28 EST 2014

```A slightly different way to look at it (I don't think it is exactly the
same problem, but the description reminded me of it):

http://mail.scipy.org/pipermail/numpy-discussion/2013-April/066269.html

(and I think there are some things that can be done to make that faster,
but I don't recall it right now)

Ben Root

On Tue, Apr 16, 2013 at 4:35 PM, Bradley M. Froehle <brad.froehle at gmail.com>
wrote:

> Hi Bryan:
>
> On Tue, Apr 16, 2013 at 1:21 PM, Bryan Woods <bwoods at aer.com> wrote:
>
>> I'm trying to do something that at first glance I think should be simple
>> but I can't quite figure out how to do it. The problem is as follows:
>>
>> I have a 3D grid Values[Nx, Ny, Nz]
>>
>> I want to slice Values at a 2D surface in the Z dimension specified by
>> Z_index[Nx, Ny] and return a 2D  slice[Nx, Ny].
>>
>> It is not as simple as Values[:,:,Z_index].
>>
>> I tried this:
>> >>> values.shape
>> (4, 5, 6)
>> >>> coords.shape
>> (4, 5)
>> >>> slice = values[:,:,coords]
>> >>> slice.shape
>> (4, 5, 4, 5)
>> >>> slice = np.take(values, coords, axis=2)
>> >>> slice.shape
>> (4, 5, 4, 5)
>> >>>
>>
>> Obviously I could create an empty 2D slice and then fill it by using
>> np.ndenumerate to fill it point by point by selecting values[i, j,
>> Z_index[i, j]]. This just seems too inefficient and not very pythonic.
>>
>
> The following should work:
>
> >>> values.shape
> (4,5,6)
> >>> coords.shape
> (4,5)
> >>> values[np.arange(values.shape[0])[:,None],
> ...        np.arange(values.shape[1])[None,:],
> ...        coords].shape
> (4, 5)
>
> Essentially we extract the values we want by values[I,J,K] where the
> indices I, J and K are each of shape (4,5) [or broadcast-able to that
> shape].
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20141203/60d04678/attachment.html>
```