我正在尝试理解tensorly包中的tl.kruskal_to_sensor((方法。在网页中,我知道它将矩阵列表作为输入,并产生张量,其cp分解是矩阵?它将矩阵列表作为输入。
但我看到了以下代码:
import tensorly as tl
rank =5
dim1= 9
dim2=8
dim3=7
A= tl.tensor(np.random.normal(0,1,[dim1,rank]))
B= tl.tensor(np.random.normal(0,1,[dim2,rank]))
C= tl.tensor(np.random.normal(0,1,[dim3,rank]))
T_approx_old = tl.kruskal_to_tensor((np.ones(rank),[A,B,C]))
我不理解这个方法中的np.ones(秩(论点。
它做什么?
此版本的kruskal_to_tensor
记录在API的开发版本中。
np.ones
对应于Kruskal张量的权重:Kruskal张量将张量表示为秩一张量(向量的外积,作为因子矩阵的列收集(的加权和。在你的例子中,和的权重都是1,并在这个1的向量中累积。
请注意,您可以归一化Kruskal张量的因子,并在这些权重中吸收它们的大小。