如何在数组中相互连接列

时间:2017-12-05 07:20:54

标签: python numpy

说我有以下数组:

a = np.array([[1,3,5,2,3],[3,2,5,6,7],[1,7,3,6,5]]);

如何将列堆叠在一起以形成单个列向量以生成以下内容?

b =np.array([[1], [3], [1], [3], [2], [7],[5],[5],[3],[2],[6],[6],[3],[7],[5]]);

5 个答案:

答案 0 :(得分:1)

您可以使用reshape功能和转置.T运算符

np.reshape(a.T, (a.size,1))

答案 1 :(得分:1)

您可以将'F'ravelreshape一起用于Fortran订单:

a.ravel('F')[:, None]
# array([[1],
#        [3],
#        [1],
#        [3],
#        [2],
# ...

答案 2 :(得分:0)

您可以展平转置数组,创建新轴并再次转置。

>>> np.ravel(a.T)[None].T
array([[1],
       [3],
       [1],
       [3],
       [2],
       [7],
       [5],
       [5],
       [3],
       [2],
       [6],
       [6],
       [3],
       [7],
       [5]])

答案 3 :(得分:0)

为了坚持堆叠的想法,a.T的列表是:

In [87]: list(a.T)
Out[87]: 
[array([1, 3, 1]),
 array([3, 2, 7]),
 array([5, 5, 3]),
 array([2, 6, 6]),
 array([3, 7, 5])]

然后可以在一个轴上连接

In [90]: np.concatenate(a.T)
Out[90]: array([1, 3, 1, 3, 2, 7, 5, 5, 3, 2, 6, 6, 3, 7, 5])

通过添加维度将其转换为列向量:

In [91]: _[:,None]
Out[91]: 
array([[1],
       [3],
       [1],
       [3],
       [2],
       [7],
       [5],
       [5],
       [3],
       [2],
       [6],
       [6],
       [3],
       [7],
       [5]])

值得注意的是,转置的a.T是通过将订单更改为F而生成的。所以这是a.ravel(order='F')方法的变体。为了堆叠列,它必须重新排序数组的元素(默认是' c'面向行)。

答案 4 :(得分:0)

最短的是a.T.reshape(-1,1)

  • a.T表示良好的布局,
  • reshape形状良好,有一列。

或同等的:a.reshape(-1,1,order='F')