我有以下具有以下尺寸的数组:
A是(2 x 1 x 10)。一般形式为(N x 1 x D)
B是(30 x 10)
我需要使用np.matmul
来制作它们的点积,以使matmul
将A的形状为1xD的N个矩阵与另一个自变量B相乘。 / p>
从A和B的尺寸来看,应该认为我需要在乘法之前对B进行转置,以便可以乘积。
B_transpose = np.transpose(B)
现在,B_transpose
是(10 x 30)
但是当我做matmul
时:
output = np.matmul(A, B_transpose)
它给我一个错误:
ValueError:形状(2,1,10)和(2,1,30)不对齐:10(dim 2)!= 1(dim 1)
实际上,它会更改B_transpose的尺寸,我不知道为什么。它应该是(10 x 30)。我用B_transpose.shape
进行了检查,就是这样。但是当相乘时,它将转换为(2 x 1 x 30)。为什么会这样?
谢谢。
答案 0 :(得分:0)
据我所知,您可以使用numpy.einsum
轻松地实现它:
import numpy as np
A = np.random.random((2, 1, 10))
B = np.random.random((30,10))
C=np.einsum('ijk,lk->ijl', A, B)
print(C)
print("shape of A: "+ str(A.shape))
print("shape of B: "+str(B.shape))
print("shape of C: "+str(C.shape))
输出:
[[[2.24297933 1.90535058 1.64265642 2.017492 1.64335181 1.92980808
2.49041745 3.34348547 1.99242493 2.48508664 1.46283295 2.32082231
2.68276213 1.58709381 1.22955766 1.46049189 1.66621528 1.62563277
2.0199153 2.06292694 1.74791187 2.80959004 1.66948659 1.87064246
1.4671402 1.83211074 1.70360887 2.13277365 2.0971552 1.89335019]]
[[3.05604669 3.21934434 1.77297603 2.61009216 2.94784787 3.44622224
3.13340867 5.00977942 3.55128091 3.75517549 2.71985505 3.84420034
4.03311806 2.56002937 1.726476 2.53251146 3.43982974 2.2561291
3.63013679 3.23935523 2.84565586 4.21606203 2.49771182 3.11465742
2.48485314 3.62590865 2.96567419 3.00654852 3.20750017 3.1852716 ]]]
shape of A: (2, 1, 10)
shape of B: (30, 10)
shape of C: (2, 1, 30)