将相同形状的块状矢量附加到不同的轴

时间:2019-11-26 13:26:36

标签: python arrays numpy

我有一个numpy数组

import numpy as np

initial_array = np.array([[
        [0, 1],
        [1, 2],
        [2, 3],
        [3, 4]],

       [[4, 5],
        [5, 6],
        [6, 7],
        [7, 8]]])

我有一个要添加的数组:

to_add = np.array([
       [ 8,  9],
       [ 9, 10],
       [10, 11],
       [11, 12]])

在此,initial_array的形状为(2, 4, 2)to_add的形状为(4, 2)。我正在寻找形状为(3, 4, 2)的最终结果:

result = np.array([[
        [ 0,  1],
        [ 1,  2],
        [ 2,  3],
        [ 3,  4]],

       [[ 4,  5],
        [ 5,  6],
        [ 6,  7],
        [ 7,  8]],

       [[ 8,  9],
        [ 9, 10],
        [10, 11],
        [11, 12]]])

如何在不将numpy数组转换回python列表的情况下完成此操作,是否可以单独使用numpy来做到这一点?

5 个答案:

答案 0 :(得分:2)

实际上,我正在展示几种方法:

>>> result = np.insert(initial_array, initial_array.shape[0], to_add, axis=0)
# or
>>> result = np.vstack((initial_array,to_add[None,...]))
# or
>>> result = np.array([*initial_array, to_add])

答案 1 :(得分:1)

除了其他答案,您还可以使用np.newaxis()

np.concatenate([initial_array, to_add[np.newaxis, :]])

结果:

Out[75]: 
array([[[ 0,  1],
        [ 1,  2],
        [ 2,  3],
        [ 3,  4]],
       [[ 4,  5],
        [ 5,  6],
        [ 6,  7],
        [ 7,  8]],
       [[ 8,  9],
        [ 9, 10],
        [10, 11],
        [11, 12]]])

答案 2 :(得分:1)

无需重塑:

np.concatenate((initial_array, [to_add]))

答案 3 :(得分:1)

您可以仅向to_add添加一个附加轴,以便可以直接将其连接:

np.concatenate([initial_array, to_add[None,:]])

array([[[ 0,  1],
        [ 1,  2],
        [ 2,  3],
        [ 3,  4]],

       [[ 4,  5],
        [ 5,  6],
        [ 6,  7],
        [ 7,  8]],

       [[ 8,  9],
        [ 9, 10],
        [10, 11],
        [11, 12]]])

答案 4 :(得分:0)

您可以在列表内将numpy.append与to_add一起使用,并且仅在轴0上附加。

initial_array = np.array([[
        [0, 1],
        [1, 2],
        [2, 3],
        [3, 4]],

       [[4, 5],
        [5, 6],
        [6, 7],
        [7, 8]]])

to_add = np.array([
       [ 8,  9],
       [ 9, 10],
       [10, 11],
       [11, 12]])

final = np.append(initial_array, [to_add], axis=0)