I'm having trouble understanding how numpy
stores its data. Consider the following:
>>> import numpy as np
>>> a = np.ndarray(shape=(2,3), order='F')
>>> for i in xrange(6): a.itemset(i, i+1)
...
>>> a
array([[ 1., 2., 3.],
[ 4., 5., 6.]])
>>> a.flags
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
This says that a
is column major (F_CONTIGUOUS
) thus, internally, a
should look like the following:
[1, 4, 2, 5, 3, 6]
This is just what it is stated in in this glossary. What is confusing me is that if I try to to access the data of a
in a linear fashion instead I get:
>>> for i in xrange(6): print a.item(i)
...
1.0
2.0
3.0
4.0
5.0
6.0
At this point I'm not sure what the F_CONTIGUOUS
flag tells us since it does not honor the ordering. Apparently everything in python is row major and when we want to iterate in a linear fashion we can use the iterator flat
.
The question is the following: given that we have a list of numbers, say: 1, 2, 3, 4, 5, 6
, how can we create a numpy
array of shape (2, 3)
in column major order? That is how can I get a matrix that looks like this
array([[ 1., 3., 5.],
[ 2., 4., 6.]])
I would really like to be able to iterate linearly over the list and place them into the newly created ndarray
. The reason for this is because I will be reading files of multidimensional arrays set in column major order.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…