我需要插入一个与其他数组形状不同的numpy数组

vaqhlq81  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(127)

我目前正在尝试将形状(640,1)的数组插入形状(480,640,3)的数组中,以获得481x640的数组,其中第一列只是640个对象的行,其他列是形状(640,3)的数组。
我试过这个:

a=ones((480, 640, 3))
b=zeros(640)
insert(a, 0, b, axis=0)

但我得到的错误:ValueError: could not broadcast input array from shape (1,1,640) into shape (1,640,3) .
我明白,因为我的数组里面有一个不同的形状比B,但我不知道如何解决这个问题。
祝你有个愉快的一天,谢谢你的反馈。

mzaanser

mzaanser1#

你必须将B的大小调整为(640,1)。因此,当你将b插入到a的第一个轴时,numpy将广播(640,1)到(640,3)以适应剩余的尺寸。然后,第一个尺寸将从480增加到481。

a = np.ones((480, 640, 3))
b = np.zeros((640, 1))
a = np.insert(a, 0, b, axis=0)
a.shape
# (481, 640, 3)

你是这个意思吗?

kxxlusnw

kxxlusnw2#

要在第一个标注中插入:

out = np.insert(a, 0, b[:,None], axis=0)
out.shape
# (481, 640, 3)

输出:

array([[[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        ...,
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]],

       [[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        ...,
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]],

       [[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        ...,

要像在最后一个维度中那样使用insert,请使用axis=2

out = np.insert(a, 0, b, axis=2)
out.shape
# (480, 640, 4)

输出:

array([[[0., 1., 1., 1.],
        [0., 1., 1., 1.],
        [0., 1., 1., 1.],
        ...,
        [0., 1., 1., 1.],
        [0., 1., 1., 1.],
        [0., 1., 1., 1.]],

       [[0., 1., 1., 1.],
        [0., 1., 1., 1.],
        [0., 1., 1., 1.],
        ...,
        [0., 1., 1., 1.],
        [0., 1., 1., 1.],
        [0., 1., 1., 1.]],

相关问题