retain dimensions for numpy slice

Peter Otten __peter__ at web.de
Mon Oct 24 14:05:47 EDT 2016


duncan smith wrote:

> Hello,
>       I have several arrays that I need to combine elementwise in
> various fashions. They are basically probability tables and there is a
> mapping of axes to variables. I have code for transposing and reshaping
> that aligns the variables / axes so the usual broadcasting rules achieve
> the desired objective. But for a specific application I want to avoid
> the transposing and reshaping. So I've specified arrays that contain the
> full dimensionality (dimensions equal to the total number of variables).
> e.g.
> 
> Arrays with shape,
> 
> [1,3,3] and [2,3,1]
> 
> to represent probability tables with variables
> 
> [B,C] and [A,B].
> 
> One operation that I need that is not elementwise is summing over axes,
> but I can use numpy.sum with keepdims=True to retain the appropriate
> shape.
> 
> The problem I have is with slicing. This drops dimensions. Does anyone
> know of a solution to this so that I can e.g. take an array with shape
> [2,3,1] and generate a slice with shape [2,1,1]? I'm hoping to avoid
> having to manually reshape it. Thanks.

Can you clarify your requirement or give an example of what you want?

Given an array 

>>> a.shape
(2, 3, 1)

you can get a slice with shape (2,1,1) with (for example)

>>> a[:,:1,:].shape
(2, 1, 1)

or even

>>> newshape = (2, 1, 1)
>>> a[tuple(slice(d) for d in newshape)].shape
(2, 1, 1)

but that's probably not what you are asking for...




More information about the Python-list mailing list