a
是形状为 (N, M, D) == (20, 4096, 6)
的数组。
b
是形状为 (N,) == (20,)
的数组。
我想将 b
的值插入到 a
中,以便 b
中的每个值都按元素附加到 >D
在 a
中变暗(a
中的第 7 个元素)。
因此,c
将是一个形状为 (20, 4096, 7)
的数组,其中 c[i,:,-1] == b[i]
对于所有 i
,并且 c[...,:-1] == a
。
我知道你可以创建一个新数组并相应地添加值,例如:
N, M, D = a.shape # (20, 4096, 6)
c = np.zeros((N, M, D+1))
c[...,:-1] = a
for i in range(N):
c[i,:,-1] = b[i]
但想知道这里的 numpy 向导是否有一种更巧妙的方法来使用 numpy 操作而不使用中间数组来完成此操作。
最佳答案
将 b
延伸到 3D
后沿第二个轴复制,然后沿最后一个轴与 a
连接 -
b_rep = np.repeat(b[:,None,None],a.shape[1],axis=1)
out = np.concatenate((a, b_rep,axis=-1)
或者,我们可以使用np.broadcast_to
来创建复制版本:
b_rep = np.broadcast_to(b[:,None,None], (len(b), a.shape[1],1)
关于python - Numpy:如何将(N,)维向量插入(N,M,D)维数组作为沿D轴的新元素? (N、M、D+1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49224228/