我在了解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]
这就是glossary中所说的内容。令我困惑的是,如果我尝试以线性方式访问
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
,我们如何才能按列主要顺序创建形状为numpy
的(2, 3)
数组?那就是我如何得到一个看起来像这样的矩阵array([[ 1., 3., 5.],
[ 2., 4., 6.]])
我真的很希望能够在列表上进行线性迭代,并将它们放入新创建的
ndarray
中。这样做的原因是因为我将读取按列主要顺序设置的多维数组文件。 最佳答案
numpy按行主要顺序存储数据。
>>> a = np.array([[1,2,3,4], [5,6,7,8]])
>>> a.shape
(2, 4)
>>> a.shape = 4,2
>>> a
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
如果更改形状,则数据顺序不会更改。
如果添加“F”,则可以得到所需的内容。
>>> b
array([1, 2, 3, 4, 5, 6])
>>> c = b.reshape(2,3,order='F')
>>> c
array([[1, 3, 5],
[2, 4, 6]])
关于python - numpy数组行专业和列专业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20341614/