I have an array of weather data by lat/lon in the following shape: (1038240,4) (See photo for sample example data)
I want to reshape this to the shape (4,721,1440) which would be four weather variables (& lat/lon) over a 721 by 1440 image of the globe.
I have tried:
newarr = t_new.reshape(4,721,1440)
which puts this in the correct shape, but doesn't match this to the first two lat/lon coordinates to the preferred format below:
For the (6,4) example data in the photo above, this operation would look like a (2,3,2) array below:
newarr = t_new.reshape(4,721,1440)
Further investigation reveals that numpy.reshape()
operates in row-major (C-style) order by default, which means it fills the new array along the last axis first (i.e., from left to right, top to bottom)
So if I reshape this first then transpose:
reshaped = t_new.reshape((1440, 721, 6)) # Reshape to (1440, 721, 4)
correct_order = reshaped.transpose((2, 1, 0)) # Swap axes to get (4, 721, 1440)
It seems to produce the desired output. I test this by looking at the slices to see that longitude/latitude are constant along each slice:
correct_order[:,:,1]
correct_order[:,1,:]
Thanks to comments from hpaulj for hint to transpose this.