Numpy: заполнить матрицу меньшим БЫСТРО - PullRequest
0 голосов
/ 14 ноября 2018

Я бы хотел заполнить одну матрицу копиями другой, например:

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

Но у меня много больших измерений, поэтому я ищу более быстрый путь.

1 Ответ

0 голосов
/ 14 ноября 2018

Мы могли бы просто получить представление о входе с помощью 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...