脾气暴躁:用较小的FAST填充矩阵

时间:2018-11-14 20:29:38

标签: python numpy indexing

我想用另一个矩阵的副本填充一个矩阵,如下所示:

for i in range(N):
   for j in range(M):
      matA[:,:,:,i,j] = matB

但是我有很多方面,所以我正在寻找一种更快的方法。

1 个答案:

答案 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))