这个问题的重点是 numpy。
我有一组矩阵,它们都共享相同的列数并且具有不同的行数。我们称它们为 A、B、C、D 等,并让它们的尺寸为 IaxK IbxK、IcxK 等
我想要的是有效地计算 IaxIbxIc...张量 P 定义如下: P(ia,ib,ic,id,ie,...)=\sum_k A(ia,k)B(ib,k)C (ic,k)...
因此,如果我有两个因素,我最终会得到简单的矩阵产品。
当然,我可以通过外部产品“手动”计算,例如:
def parafac(factors,components=None):
ndims = len(factors)
ncomponents = factors[0].shape[1]
total_result=array([])
if components is None:
components=range(ncomponents)
for k in components:
#for each component (to save memory)
result = array([])
for dim in range(ndims-1,-1,-1):
#Augments model with next dimension
current_dim_slice=[slice(None,None,None)]
current_dim_slice.extend([None]*(ndims-dim-1))
current_dim_slice.append(k)
if result.size:
result = factors[dim].__getitem__(tuple(current_dim_slice))*result[None,...]
else:
result = factors[dim].__getitem__(tuple(current_dim_slice))
if total_result.size:
total_result+=result
else:
total_result=result
return total_result
不过,我想要一些计算效率更高的东西,比如依赖内置的 numpy 函数,但我找不到相关函数,有人可以帮我吗?
干杯,谢谢