3

Let's say I have this array x:

x = array([1, 2, 3, 4, 5, 6, 7, 8])
x.shape = (8,1)

I want to reshape it to become

array([[1, 3, 5, 7], 
       [2, 4, 6, 8]])

this is a reshape(2, 4) on x but in the straight forward way:

y = x.reshape(2,4)

y becomes

array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

and that's not what I want. Is there a way to transform the array in that specific way?

0

4 Answers 4

7
In[4]: x.reshape(4, 2).T
Out[4]: 
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])
Sign up to request clarification or add additional context in comments.

1 Comment

Transpose!! Awesome.tks
4

The easiest way to do this is to specify the orderargument in reshape function.


You need the Fortran order.

Side note: Matlab by default is using Fortran order but in python you need to specify that.


Use this:

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = x.reshape(2,4, order='F')

print(y)
#array([[1, 3, 5, 7],
#       [2, 4, 6, 8]])

1 Comment

This is interesting, as I was trying to replicate some results I had in Matlab, and couldn't get the same in Python when I was reshaping. It took a long time until I considered that the ordering was different!
2

Another option is to use the option order='F' to your reshape-call like

res = numpy.reshape(my_array, (2,4), order='F')

https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.reshape.html

Comments

0

Yes, you can do:

y = np.array([x[0::2], x[1::2]])

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.