我正在尝试以下方法:
给定矩阵A(x,y,3)和另一个矩阵B(3,3),我想返回一个(x,y,3)矩阵,其中A的第三维乘以值B(类似当RGB图像转换为灰色时,只有那些" RGB"值乘以矩阵而不是标量)...
以下是我尝试的内容:
np.multiply(B, A)
np.einsum('ijk,jl->ilk', B, A)
np.einsum('ijk,jl->ilk', A, B)
所有这些都因尺寸未对齐而失败。
我错过了什么?
答案 0 :(得分:2)
对于这种混乱感到抱歉,我认为你可以使用简单的numpy方法做这样的事情:
首先,你可以重塑A,使其纤维(或深度向量A [:,:,i])作为列放在矩阵C中:
C = A.reshape(x*y,3).T
然后使用简单的矩阵乘法:
D = numpy.dot(B,C)
最后将结果带回原始尺寸:
D.T.reshape([x,y,3])
答案 1 :(得分:2)
您可以使用np.tensordot
-
np.tensordot(A,B,axes=((2),(1)))
Related post to understand tensordot
einsum
相当于 -
np.einsum('ijk,lk->ijl', A, B)
我们也可以使用A.dot(B.T)
,但这会在引擎盖下循环。所以,可能不是最受欢迎的,但它是一个紧凑的解决方案,