Python行主要到列主要顺序向量

Python行主要到列主要顺序向量,python,numpy,row-major-order,column-major-order,Python,Numpy,Row Major Order,Column Major Order,具有类似矩阵的 ma = [[0.343, 0.351, 0.306], [0.145, 0.368, 0.487]] 我想得到一个向量,比如: [0.343, 0.145, 0.351, 0.368, 0.306, 0.487] 为了得到它,我正在使用numpy和重塑,但它不起作用 a = np.array(ma) >>> print a.shape (2, 3) 但我得到了: c = a.reshape(3, 2, order='F') >>> pr

具有类似矩阵的

ma = [[0.343, 0.351, 0.306], [0.145, 0.368, 0.487]]
我想得到一个向量,比如:

[0.343, 0.145, 0.351, 0.368, 0.306, 0.487]
为了得到它,我正在使用
numpy
重塑
,但它不起作用

a = np.array(ma)
>>> print a.shape
(2, 3)
但我得到了:

c = a.reshape(3, 2, order='F')
>>> print c
array([[ 0.343,  0.368],
       [ 0.145,  0.306],
       [ 0.351,  0.487]])
对于任何矩阵大小,最好的方法是什么?我的意思是,例如,如果矩阵不是平方的:

[[0.404, 0.571, 0.025],
 [0.076, 0.694, 0.230],
 [0.606, 0.333, 0.061],
 [0.595, 0.267, 0.138]]
我想得到:

[0.404, 0.076, 0.606, 0.595, 0.571, 0.694, 0.333, 0.267, 0.025, 0.230, 0.061, 0.138]

通过变换矩阵,然后使用以下方法,您可以得到想要的结果:


按Fortran顺序展平阵列:

c = a.flatten(order='F')
通过
重塑
,您也可以获得想要的结果,但它更为冗长:

c = a.reshape(a.size, order='F')
可以使用来展平阵列

>>> a.T.ravel()
array([ 0.343,  0.145,  0.351,  0.368,  0.306,  0.487])

# Or specify Fortran order.
>>> a.ravel('F')
array([ 0.343,  0.145,  0.351,  0.368,  0.306,  0.487])

a = np.random.rand(4,2)
>>> a
array([[ 0.59507926,  0.25011282],
       [ 0.68171766,  0.41653172],
       [ 0.83888691,  0.22479481],
       [ 0.04540208,  0.23490886]])

>>> a.T.ravel()  # or a.ravel('F')
array([ 0.59507926,  0.68171766,  0.83888691,  0.04540208,  0.25011282,
        0.41653172,  0.22479481,  0.23490886])

如果你想要一个
(6,)
,为什么要告诉Python将数组的形状改为3×2呢?我做了一些测试,但仍然没有得到我想要的形状,而且我如何告诉Python得到大小(在示例中是3,2),然后再做形状(3*2)?见鬼?这看起来确实有效,但与文档中所说的
ravel
接受参数的方式完全相反。这是未记录的功能吗?还是虫子?显示
order
参数,以及方法
a.ravel([order])
的文档字符串。这是在新版本中添加的吗?它在Numpy 1.3文档中(v1.9是最新版本),尽管订单选项已扩展到
C
F
之外。现在有
A
k
选项(详情请参见文档)。@hpaulj:我的评论是关于答案的早期版本,它提供了
[3,2]
作为
顺序
参数。这是一个无声错误(该参数被忽略,因为它与四个选项中的一个不匹配).如果列表是平面的而不是二维的呢?
>>> a.T.ravel()
array([ 0.343,  0.145,  0.351,  0.368,  0.306,  0.487])

# Or specify Fortran order.
>>> a.ravel('F')
array([ 0.343,  0.145,  0.351,  0.368,  0.306,  0.487])

a = np.random.rand(4,2)
>>> a
array([[ 0.59507926,  0.25011282],
       [ 0.68171766,  0.41653172],
       [ 0.83888691,  0.22479481],
       [ 0.04540208,  0.23490886]])

>>> a.T.ravel()  # or a.ravel('F')
array([ 0.59507926,  0.68171766,  0.83888691,  0.04540208,  0.25011282,
        0.41653172,  0.22479481,  0.23490886])
>>> A = ([[0, 1, 2],
...        [3, 4, 5],
...        [6, 7, 8]])
>>> 
>>> print(A)
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
>>> 
>>> [y  for x in [[row[i] for row in A] for i in range(len(A[0]))] for y in x]
[0, 3, 6, 1, 4, 7, 2, 5, 8]
>>> 
>>>