Python / Numpy широковещательное соединение двух массивов - PullRequest
1 голос
/ 28 апреля 2020

Вопрос состоит в том, как в этом случае более эффективно объединить два массива. Существует массив numpy, один из которых имеет форму (N, M, 1), и массив два из формы (M, F). Требуется объединить второй массив с первым, чтобы создать массив формы (N, M, F + 1). Элементы второго массива будут транслироваться по N.

. Одним из решений является копирование массива 2 для получения размера первого (по всем dim, кроме одного), а затем конкатенации. Но это, если копирование может быть выполнено как широковещательная рассылка во время соединения / конкатата, это использовало бы намного меньше памяти.

Любые предложения о том, как сделать это более эффективным?

Настройка:

import numpy as np 

arr1 = np.random.randint(0,10,(5,10))
arr1 = np.expand_dims(arr1, axis=-1) #(5,10, 1)

arr2 = np.random.randint(0,4,(10,15)) 
arr2 = np.expand_dims(arr2, axis=0) #(1, 10, 15)

arr2_2 = arr2
for i in range(len(arr1)-1):
    arr2_2 = np.concatenate([arr2_2, arr2],axis=0)

arr2_2.shape #(5, 10, 15)
np.concatenate([arr1, arr2_2],axis=-1) # (5, 10, 16) -> correct end result

Соединение arr1 и arr2 для получения

1 Ответ

0 голосов
/ 28 апреля 2020

попробуйте

>>> a = np.random.randint(0, 10, (5, 10))
>>> b = np.random.randint(0, 4, (10, 15))
>>> c = np.dstack((a[:, :, np.newaxis], np.broadcast_to(b, (a.shape[0], *b.shape))))
>>> a.shape, b.shape, c.shape
((5, 10), (10, 15), (5, 10, 16)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...