首页 > 解决方案 > 展平时将张量与矩阵相乘

问题描述

我有一个张量 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 上做到这一点?

标签: pythonnumpymatrixnumpy-ndarraytensor

解决方案


如果我理解A(:,:)在 MATLAB 中正确地将许多维度压缩到矩阵的第二维中,则最终A(:,:)的形状为 (8,5*4*4),如A=rand(8,5,4,4). 在这种情况下,这应该相当于A(:,:)

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

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


推荐阅读