Умножьте каждую строку матрицы на каждую строку другой матрицы - PullRequest
2 голосов
/ 05 июля 2019

В numpy / PyTorch у меня есть две матрицы, например X=[[1,2],[3,4],[5,6]], Y=[[1,1],[2,2]]. Я хотел бы расставить точки на каждой строке X с каждой строкой Y и получить результаты

[[3, 6],[7, 14], [11,22]]

Как мне этого добиться ?, Спасибо!

Ответы [ 3 ]

4 голосов
/ 05 июля 2019

Я думаю, это то, что вы ищете:

import numpy as np

x= [[1,2],[3,4],[5,6]] 
y= [[1,1],[2,2]]

x = np.asarray(x) #convert list to numpy array 
y = np.asarray(y) #convert list to numpy array

product = np.dot(x, y.T)

.T транспонирует матрицу, которая в этом случае необходима для умножения (из-за того, что произведения точек определены ). print(product) выведет:

[[ 3  6]
 [ 7 14]
 [11 22]]
1 голос
/ 05 июля 2019

В PyTorch вы можете достичь этого, используя torch.mm(a, b) или torch.matmul(a, b), как показано ниже:

x = np.array([[1,2],[3,4],[5,6]])
y = np.array([[1,1],[2,2]])
x = torch.from_numpy(x)
y = torch.from_numpy(y)
# print(torch.matmul(x, torch.t(y)))
print(torch.mm(x, torch.t(y)))

Выход:

tensor([[ 3,  6],
        [ 7, 14],
        [11, 22]], dtype=torch.int32)
1 голос
/ 05 июля 2019

Использование einsum

np.einsum('ij,kj->ik', X, Y)

array([[ 3,  6],
       [ 7, 14],
       [11, 22]])
...