我有一个张量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上执行此操作?
答案 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
格式)。