我很难理解 numpy
如何存储数据。考虑以下内容:
>>> 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
这意味着a
是按列主序(F_CONTIGUOUS
)排列的,因此在内部,a
应该如下所示:
[1, 4, 2, 5, 3, 6]
这正是在词汇表中所述的内容。让我感到困惑的是,如果我尝试以线性方式访问a
的数据,我会得到:
>>> for i in xrange(6): print a.item(i)
...
1.0
2.0
3.0
4.0
5.0
6.0
目前我不确定 F_CONTIGUOUS
标志告诉我们什么,因为它没有遵守顺序。显然在Python中一切都是行主序的,当我们想要以线性方式迭代时,我们可以使用迭代器flat
。
问题如下:假设我们有一个数字列表: 1, 2, 3, 4, 5, 6
,如何创建一个列主序的形状为(2, 3)
的numpy数组?也就是说,我怎样才能得到一个看起来像这样的矩阵:
array([[ 1., 3., 5.],
[ 2., 4., 6.]])
我希望能够线性迭代列表并将它们放入新创建的ndarray
中。之所以这样做,是因为我将读取按列主序设置的多维数组文件。