Как умножить строки списка на другой список? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два списка (l1, l2) с произвольными размерами, скажем, l1.shape = (3,2) и l2.shape = (2,2,2).

l1 = np.array([[1, 10], 
               [2, 20], 
               [3, 30]])

l2 = np.array([[[1, 2], 
                [3, 4]],

               [[5, 6],
                [7, 8]]],)

Я хочу умножить каждую строку l1 на весь l2 и сохранить каждый результат в другом списке. Поэтому создаем новый список (l3) с дополнительным измерением следующим образом: l3.shape = (3,2,2,2). Поэтому я ожидаю:

l3 = np.array([[[[1,   20], 
                 [3,   40]],
                [[5,   60],
                 [7,   80]]],

               [[[2,   40], 
                 [6,   80]],
                [[10, 120],
                 [14, 160]]],

               [[[3,   60], 
                 [9,  120]],
                [[15, 180],
                 [21, 240]]]])

Я пробовал умножать списки строк отдельно, используя, что numpy может транслировать массивы, чтобы они имели одинаковый размер. Однако я не смог сделать это со списками произвольного размера , и это важно для моего приложения.

Я пытался:

l3 = l1[0,:] * l2

array([[[1, 20], 
        [3, 40]],
       [[5, 60],
        [7, 80]]])

Но Я не могу автоматически создать индекс l1, поэтому количество измерений в обоих списках не имеет значения.

1 Ответ

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

Попробуйте следующее,

(l1[:,:,None,None]*l2.T).swapaxes(1,3)

Это должно дать вам желаемый результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...