使用pathon tensorly 实现张量CP分解

  • 使用tensorly.decomposition来进行张量分解
import numpy as np
import tensorly as tl
from tensorly.decomposition import parafac   #CPdecomposition

就像一个矩阵可以分解为两个向量的外积总和,一个三阶张量可以表示为三个向量的外积之和,求和中的项数成为张量的Kruskal秩
这里写图片描述

  • 使用parafac将张量进行CP分解
X = tl.tensor(np.arange(24).reshape(3, 4, 2))
factors = parafac(X, rank=3)

选择秩为3,也就是将张量分解为三个一阶张量的外积和

print(factors)    #打印出三个维度矩阵 ,列为rank,行为张量的行数
print(len(factors))
print([f.shape for f in factors])

这里写图片描述
分解为三个维度矩阵,矩阵的行对应张量的每一个维度,列对应rank
将分解之后的矩阵还原成原始张量,并进行比较

full_tensor = tl.kruskal_to_tensor(factors)
print("original_tensor: % r" % X)
print("full_tensor: % r" % full_tensor)

这里写图片描述
可以看出原始张量跟还原张量基本一样

猜你喜欢

转载自blog.csdn.net/weixin_36372879/article/details/80771664