6

特定の方法で配列を結合するという小さな問題に直面しています。私たちが持っているとしましょう

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

まだ動作しません...

4

3 に答える 3

6

うーん 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]))]
于 2013-11-13T16:33:07.413 に答える
5

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]]])
于 2013-11-13T16:42:50.267 に答える
2

を探してい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]]])
于 2016-02-09T04:08:17.213 に答える