<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 29, 2017 at 6:03 PM, Moroney, Catherine M (398E) <span dir="ltr"><<a href="mailto:Catherine.M.Moroney@jpl.nasa.gov" target="_blank">Catherine.M.Moroney@jpl.nasa.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">







<div bgcolor="white" lang="EN-US">
<div class="gmail-m_-7086056345606375623WordSection1">
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">Hello,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">I have an n-dimensional array (say (4,4,2,2)) and I wish to automatically extract all the (4,4) slices in it.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">i.e.
<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">a = numpy.arange(0, 64).reshape(4,4,2,2)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">slice1 = a[..., 0, 0]<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">slice2 = a[..., 0, 1]<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">slice3 = a[..., 1, 0]<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">slice4 = a[..., 1,1]<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">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.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Helvetica,sans-serif">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?</span></p></div></div></blockquote><div><br></div>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.</div><div class="gmail_quote"><br></div><div class="gmail_quote">E.g. (using (4,4,3,3) as the original shape for clarity)</div><div class="gmail_quote"><br><font face="monospace, monospace"><div class="gmail_quote">[~]</div><div class="gmail_quote">|26> a = numpy.arange(0, 4*4*3*3).reshape(4,4,3,3)</div><div class="gmail_quote"><br></div><div class="gmail_quote">[~]</div><div class="gmail_quote">|27> b = a.reshape([4, 4, -1])</div><div class="gmail_quote"><br></div><div class="gmail_quote">[~]</div><div class="gmail_quote">|28> b.shape</div><div class="gmail_quote">(4, 4, 9)</div><div class="gmail_quote"><br></div><div class="gmail_quote">[~]</div><div class="gmail_quote">|29> c = np.rollaxis(b, -1, 0)</div><div class="gmail_quote"><br></div><div class="gmail_quote">[~]</div><div class="gmail_quote">|30> c.shape</div><div class="gmail_quote">(9, 4, 4)</div><div class="gmail_quote"><br></div><div class="gmail_quote">[~]</div><div class="gmail_quote">|31> c[0]</div><div class="gmail_quote">array([[  0,   9,  18,  27],</div><div class="gmail_quote">       [ 36,  45,  54,  63],</div><div class="gmail_quote">       [ 72,  81,  90,  99],</div><div class="gmail_quote">       [108, 117, 126, 135]])</div><div class="gmail_quote"><br></div><div class="gmail_quote">[~]</div><div class="gmail_quote">|32> c[1]</div><div class="gmail_quote">array([[  1,  10,  19,  28],</div><div class="gmail_quote">       [ 37,  46,  55,  64],</div><div class="gmail_quote">       [ 73,  82,  91, 100],</div><div class="gmail_quote">       [109, 118, 127, 136]])</div><div class="gmail_quote"><br></div></font></div>-- <br><div class="gmail_signature">Robert Kern</div>
</div></div>