说我有以下数组:
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]]);
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以将'F'
与ravel
或reshape
一起用于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')
。