Numpy - 带有2d数组的多个3d数组

时间:2017-10-25 10:41:47

标签: python numpy matrix

我正在尝试以下方法:

给定矩阵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)

所有这些都因尺寸未对齐而失败。

我错过了什么?

2 个答案:

答案 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),但这会在引擎盖下循环。所以,可能不是最受欢迎的,但它是一个紧凑的解决方案,