Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Is it possible to flatten an array with two different major orders without using for loop?

In python, I would like to flatten an array that are 3 dimensional. Say shape (10, 15, 200). But the first two would need to be flattened with row-major order while the remaining flatten operation would be done in column-major order.

I can probably do this in a for loop by iterating over operations like slicing the array, flattening it individually, and storing it in the main array. For example, I would slice the main array to be (10, 15) do a row-major flatten –> store it to the main with (150, 200), and then do a column-major flatten operation.

I am not sure if this is the most efficient method of doing this. Is there a better way to do this using numpy calls?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

First use .reshape with the default "C" ordering (row-major) on the first two dimensions and then use .flatten with the "F" ordering (column-major) for the final result.

import numpy as np

a = np.arange(3*4*5).reshape(3,4,5)
b = a.reshape(-1, a.shape[-1]).flatten("F")

Result:

array([ 0,  5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55,  1,  6, 11, 16, 21,
       26, 31, 36, 41, 46, 51, 56,  2,  7, 12, 17, 22, 27, 32, 37, 42, 47,
       52, 57,  3,  8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58,  4,  9, 14,
       19, 24, 29, 34, 39, 44, 49, 54, 59])
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading