python - Numpy:如何将(N,)维向量插入(N,M,D)维数组作为沿D轴的新元素? (N、M、D+1)

标签 python arrays numpy array-broadcasting

a 是形状为 (N, M, D) == (20, 4096, 6) 的数组。

b 是形状为 (N,) == (20,) 的数组。

我想将 b 的值插入到 a 中,以便 b 中的每个值都按元素附加到 >Da 中变暗(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/

相关文章:

python - 在heroku-18堆栈上部署python 3.6.5 Django应用程序

java - 需要找到数组中数字之间的差异并保存到新数组 - 新手

c++ - 试图创建一个指向动态分配的 char 数组的指针

python - 获取 numpy 数组中非零元素的数量?

python - 当指数为负时,为什么 numpy.power 不按元素对数组进行操作?

python - 有理由在python中用try try语句包装kwargs.get()吗?

python - 我应该坚持使用bash来开发高级Linux自动化脚本,还是切换到Python?

javascript - 如何检查数组中的每一项?

python - Python 中的多变量核密度估计

python - 如何在 Cython 包装器的 setup.py 中添加 pkg-config