I have a array like following,
from numpy import *
a=array([1,2,3,4,5,6,7,8,9])
I want to get the result like following
[[1,4,7],[2,5,8],[3,6,9]]
Because I have a big array. So i need a efficient way to do it . And it's better to reshape it in-place.
You can use reshape
passing order='F'
. Whenever possible, the returned array will be only a view of the original one, without data being copied, for example:
a = np.arange(1, 10)
# array([1, 2, 3, 4, 5, 6, 7, 8, 9])
b = a.reshape(3, 3)
c = a.reshape(3, 3, order='F')
a[0] = 11
print(b)
#array([[ 11, 4, 7],
# [ 2, 5, 8],
# [ 3, 6, 9]])
print(c)
#array([[ 11, 4, 7],
# [ 2, 5, 8],
# [ 3, 6, 9]])
The flags
property can be used to check the memory order and data ownership of an array:
print(a.flags)
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
print(b.flags)
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
print(c.flags)
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
You can use reshape and change the order parameter to FORTRAN (column-major) order:
a.reshape((3,3),order='F')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With