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

时间:2015-10-09 04:57:30

标签: 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]

要尝试获取它,我使用的是numpyreshape,但它无效。

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]

4 个答案:

答案 0 :(得分:5)

您可以使用ravel()展平数组。

>>> 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])

答案 1 :(得分:4)

通过转置矩阵,然后使用numpy's ravel function

,您可以获得所需
mat = np.random.rand(3,2)
print np.ravel(mat.T)

答案 2 :(得分:3)

以Fortran顺序展平数组:

c = a.flatten(order='F')

你也可以使用reshape得到你想要的结果,但它更啰嗦:

c = a.reshape(a.size, order='F')

答案 3 :(得分:1)

G:
相关问题