我正在尝试使用python库坐骨神经张量来分解一个3D矩阵。我设法将我的张量(尺寸为100x50x5)分解成三个矩阵。我的问题是,如何利用张量分解产生的分解矩阵,重新构造初始矩阵?我想看看分解是否有任何意义。我的代码如下:
import logging
from scipy.io.matlab import loadmat
from sktensor import dtensor, cp_als
import numpy as np
//Set logging to DEBUG to see CP-ALS information
logging.basicConfig(level=logging.DEBUG)
T = np.ones((400, 50))
T = dtensor(T)
P, fit, itr, exectimes = cp_als(T, 10, init='random')
// how can I re-compose the Matrix T? TA = np.dot(P.U[0], P.U[1].T)
我使用的是标准分解,这是由cp_als函数提供的。分解矩阵的期望维数是多少?
发布于 2016-09-30 14:57:48
例如,4个矩阵的CP乘积
可以使用爱因斯坦符号表示为
或者在裸体的时候
numpy.einsum('az,bz,cz,dz -> abcd', A, B, C, D)
所以在你的情况下你会用
numpy.einsum('az,bz->ab', P.U[0], P.U[1])
或者,在你的3矩阵的情况下
numpy.einsum('az,bz,cz->abc', P.U[0], P.U[1], P.U[2])
sktensor.ktensor.ktensor
还有一个totensor()
方法,它正是这样做的:
np.allclose(np.einsum('az,bz->ab', P.U[0], P.U[1]), P.totensor())
>>> True
https://stackoverflow.com/questions/39748285
复制相似问题