【问题标题】:Numpy: Fill in a Matrix With a Smaller One FASTNumpy:用较小的 FAST 填充矩阵
【发布时间】:2019-04-17 21:30:51
【问题描述】:

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

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

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

【问题讨论】:

  • matAmatB的形状是什么?
  • 很难回答没有细节,包括有多大,当前的解决方案有多快(为什么还不够快)?

标签: python numpy indexing


【解决方案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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-20
    • 2016-10-07
    • 1970-01-01
    • 2023-04-06
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多