簡體   English   中英

結合numpy多維數組

[英]Combining numpy multi-dimensional arrays

我面臨一個小問題,以某種方式組合數組。 讓我們說我們有

a=array([[1,1,1],[2,2,2],[3,3,3]])

b=array([[10,10,10],[20,20,20],[30,30,30]])

我希望得到

c=array([[[1,1,1],[10,10,10]],[[2,2,2],[20,20,20]],[[3,3,3],[30,30,30]]])

真正的問題是我的陣列a和b比3個坐標長得多!

我使用concatenate實現的最好的是:

concatenate((a,b),axis=2)

結果

array([[ 1, 1, 1, 10, 10, 10], [ 2, 2, 2, 20, 20, 20], [ 3, 3, 3, 30, 30, 30]])

這是相當不錯但沒有足夠的深度。

此外,我嘗試了另一個問題來獲得所需的深度:

d=concatenate((a[...,None],b[...,None]),axis=2)

但結果是:

 array([[[ 1, 10],
    [ 1, 10],
    [ 1, 10]],

   [[ 2, 20],
    [ 2, 20],
    [ 2, 20]],

   [[ 3, 30],
    [ 3, 30],
    [ 3, 30]]])

哪個仍然不起作用......

ummm zip(a,b)

不是你想要的??

>>> a=array([[1,1,1],[2,2,2],[3,3,3]]);b=array([[10,10,10],[20,20,20],[30,30,30]
>>> zip(a,b)
[(array([1, 1, 1]), array([10, 10, 10])), (array([2, 2, 2]), array([20, 20, 20])), (array([3, 3, 3]), array([30, 30, 30]))]

看起來你想在0和1之間添加一個新軸,所以把None放在中間。 這將使軸1移動到軸2並在1處創建新尺寸。如下所示:

a = array([[1,1,1],[2,2,2],[3,3,3]])
b = array([[10,10,10],[20,20,20],[30,30,30]])
c = concatenate((a[:, None, :], b[:, None, :]), axis=1)

>>> c
array([[[ 1,  1,  1],
    [10, 10, 10]],

   [[ 2,  2,  2],
    [20, 20, 20]],

   [[ 3,  3,  3],
    [30, 30, 30]]])

你正在尋找numpy.stack 它用於沿新軸連接陣列; 與'numpy.concatenate'形成對比,后者用於沿現有軸連接數組。 隨着stack ,您所指定的軸在其中軸這將是疊層條款加入一起; 所以你要指定軸1。

a = array([[1,1,1],[2,2,2],[3,3,3]])
b = array([[10,10,10],[20,20,20],[30,30,30]])
c = stack((a, b), axis=1)

>>> c
array([[[ 1,  1,  1],
    [10, 10, 10]],

   [[ 2,  2,  2],
    [20, 20, 20]],

   [[ 3,  3,  3],
    [30, 30, 30]]])

暫無
暫無

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

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