展平时将张量与矩阵相乘

时间:2020-05-12 01:18:48

标签: python numpy matrix numpy-ndarray tensor

我有一个张量A(可以是任意维)和一个矩阵M。我想通过将张量展平以得到一个矩阵来将它们相乘。

在MATLAB上,我可以简单地做到这一点:

function B = multiplyflatten(A,M)
B = M*A(:,:)

出于测试目的,可以使用

运行上述功能
A=rand(8,5,4,4)
B=rand(1,8)

如何使用numpy ndarrays在python上获得等效的东西?下面的块不会产生等效的东西

def multiplyflatten(A,M):
    B=np.matmul(M,A[:,:])

A(:,:)在MATLAB中将许多维数压缩为矩阵的第二维。有没有一种简单的方法可以在Python上执行此操作?

1 个答案:

答案 0 :(得分:2)

如果我了解 A(:,:)正确地将许多维数压缩到MATLAB矩阵的第二维上,则最终的A(:,:)的形状为(8,5 * 4 * 4),例如A=rand(8,5,4,4)。在这种情况下,它应该等效于A(:,:)

A = A.reshape(A.shape[0], -1, order='F')

-1隐式计算将A拟合到二维矩阵所需的剩余形状。根据@hegdep的评论,matlab的默认数组存储格式为F.contiguous(而numpy的默认数组存储为C-contiguous格式)。