[Numpy-discussion] selecting all 2-d slices out of n-dimensional array
John Ladasky
jladasky at itu.edu
Tue Aug 29 22:13:08 EDT 2017
Nice solution, Robert.
My solution was not idiomatic Numpy, but it was idiomatic Python:
def slice2d(arr):
xmax, ymax = arr.shape[-2:]
return (arr[...,x,y] for x in range(xmax) for y in range(ymax))
On Tue, Aug 29, 2017 at 6:47 PM, Robert Kern <robert.kern at gmail.com> wrote:
> On Tue, Aug 29, 2017 at 6:03 PM, Moroney, Catherine M (398E) <
> Catherine.M.Moroney at jpl.nasa.gov> wrote:
>
>> Hello,
>>
>>
>>
>> I have an n-dimensional array (say (4,4,2,2)) and I wish to automatically
>> extract all the (4,4) slices in it.
>>
>> i.e.
>>
>>
>>
>> a = numpy.arange(0, 64).reshape(4,4,2,2)
>>
>> slice1 = a[..., 0, 0]
>>
>> slice2 = a[..., 0, 1]
>>
>> slice3 = a[..., 1, 0]
>>
>> slice4 = a[..., 1,1]
>>
>>
>>
>> Simple enough example but in my case array “a” will have unknown rank and
>> size. All I know is that it will have more than 2 dimensions, but I don’t
>> know ahead of time how many dimensions or what the size of those dimensions
>> are.
>>
>>
>>
>> What is the best way of tackling this problem without writing a whole
>> bunch of if-then cases depending on what the rank and shape of a is? Is
>> there a one-size-fits-all solution?
>>
>
> First, reshape the array to (4, 4, -1). The -1 tells the method to choose
> whatever's needed to get the size to work out. Then roll the last axis to
> the front, and then you have a sequence of the (4, 4) arrays that you
> wanted.
>
> E.g. (using (4,4,3,3) as the original shape for clarity)
>
> [~]
> |26> a = numpy.arange(0, 4*4*3*3).reshape(4,4,3,3)
>
> [~]
> |27> b = a.reshape([4, 4, -1])
>
> [~]
> |28> b.shape
> (4, 4, 9)
>
> [~]
> |29> c = np.rollaxis(b, -1, 0)
>
> [~]
> |30> c.shape
> (9, 4, 4)
>
> [~]
> |31> c[0]
> array([[ 0, 9, 18, 27],
> [ 36, 45, 54, 63],
> [ 72, 81, 90, 99],
> [108, 117, 126, 135]])
>
> [~]
> |32> c[1]
> array([[ 1, 10, 19, 28],
> [ 37, 46, 55, 64],
> [ 73, 82, 91, 100],
> [109, 118, 127, 136]])
>
> --
> Robert Kern
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
>
--
*John J. Ladasky Jr., Ph.D.*
*Research Scientist*
*International Technological University*
*2711 N. First St, San Jose, CA 95134 USA*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20170829/00de816d/attachment.html>
More information about the NumPy-Discussion
mailing list