Skip to content Skip to sidebar Skip to footer

How Does Numpy.reshape() With Order = 'f' Work?

I thought I understood the reshape function in Numpy until I was messing around with it and came across this example: a = np.arange(16).reshape((4,4)) which returns: array([[ 0,

Solution 1:

The elements of a in order 'F'

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

are [0,4,8,12,1,5,9 ...]

Now rearrange them in a (2,8) array.

I think the reshape docs talks about raveling the elements, and then reshaping them. Evidently the ravel is done first.

Experiment with a.ravel(order='F').reshape(2,8).

Oops, I get what you expected:

In [208]: a = np.arange(16).reshape(4,4)
In [209]: a
Out[209]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
In [210]: a.ravel(order='F')
Out[210]: array([ 0,  4,  8, 12,  1,  5,  9, 13,  2,  6, 10, 14,  3,  7, 11, 15])
In [211]: _.reshape(2,8)
Out[211]: 
array([[ 0,  4,  8, 12,  1,  5,  9, 13],
       [ 2,  6, 10, 14,  3,  7, 11, 15]])

OK, I have to keep the 'F' order during the reshape

In [214]: a.ravel(order='F').reshape(2,8, order='F')
Out[214]: 
array([[ 0,  8,  1,  9,  2, 10,  3, 11],
       [ 4, 12,  5, 13,  6, 14,  7, 15]])

In [215]: a.ravel(order='F').reshape(2,8).flags
Out[215]: 
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  ...
In [216]: a.ravel(order='F').reshape(2,8, order='F').flags
Out[216]: 
  C_CONTIGUOUS : False
  F_CONTIGUOUS : True

From np.reshape docs

You can think of reshaping as first raveling the array (using the given index order), then inserting the elements from the raveled array into the new array using the same kind of index ordering as was used for the raveling.

The notes on order are fairly long, so it's not surprising that the topic is confusing.

Post a Comment for "How Does Numpy.reshape() With Order = 'f' Work?"