簡體   English   中英

如何將數組中的列彼此串聯

[英]How to concatenate columns on top of each other in an array

說我有以下數組:

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

您可以使用重塑功能和轉置.T運算符

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

您可以將'F'與Fortran訂單一起使用,或進行ravelreshape

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

您可以展平轉置數組,創建新軸,然后再次轉置。

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

堅持堆疊思想, aT的列表為:

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

可能值得注意的是,轉置aT是通過將順序更改為F來產生的。 因此,這是a.ravel(order='F')方法的一種變體。 為了堆疊列,它必須對數組的元素重新排序(默認為“ c”面向行)。

最短的是aTreshape(-1,1)

  • aT為良好的布局,
  • 用一根柱子reshape塑形以獲得良好的形狀。

或等效值: a.reshape(-1,1,order='F')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM