def tensordotcontract(tensors):
'''
Use np.tensordot to implement the contraction of tensors.
Parameters
----------
tensors : list of Tensor
The tensors to be contracted.
Returns
-------
Tensor
The contracted tensor.
'''
def _contract_(a,b):
common=set(a.labels)&set(b.labels)
aaxes=[a.axis(label) for label in common]
baxes=[b.axis(label) for label in common]
labels=[label for label in it.chain(a.labels,b.labels) if label not in common]
axes=(aaxes,baxes) if len(common)>0 else 0
return Tensor(np.tensordot(a,b,axes=axes),labels=labels)
result=tensors[0]
for i in xrange(1,len(tensors)):
result=_contract_(result,tensors[i])
return result
评论列表
文章目录