我想用另一个矩阵的副本填充一个矩阵,如下所示:
for i in range(N):
for j in range(M):
matA[:,:,:,i,j] = matB
但是我有很多方面,所以我正在寻找一种更快的方法。
答案 0 :(得分:1)
我们可以简单地使用np.broadcast_to
来查看输入以获取所需的输出-
matA = np.broadcast_to(matB[:,:,:,None,None], matB.shape + (N,M))
成为一个视图,它实际上是免费的-
In [292]: matB = np.random.rand(20,20,20)
In [293]: N,M = 20,20
In [294]: %timeit np.broadcast_to(matB[:,:,:,None,None], matB.shape + (N,M))
100000 loops, best of 3: 4.02 µs per loop
如果需要具有自身存储空间的输出,请使用matA.copy()
创建一个副本。
或者,我们可以使用np.repeat
-
np.repeat(matB[:,:,:,None],N*M,axis=-1).reshape(matB.shape+(N,M))