首页 > 解决方案 > 在张量流中做逆矩阵的优雅方法

问题描述

我想在tensorflow 2中使用cholesky分解来反转列表中的一堆张量,但生成的代码非常难看。有没有优雅/更pythonic的方式来做这样的事情:

iMps = []
for Mp in Mps :
    cholMp  = tf.linalg.cholesky(Mp)
    icholMp = tf.linalg.inv(cholMp)
    iMp = tf.tensordot(tf.transpose(icholMp),icholMp)
    iMps.append(iMp)

是否可以用其他东西替换 for 循环?, Mps 是不同大小的张量列表(我可以将它表示为其他东西吗?)。有没有办法让它更优雅?

标签: pythontensorflowlinear-algebratensorflow2.0

解决方案


您可以使用 python Map 函数来实现这一点。

我已修改您的代码以创建如下所示的 Map 函数。

def inverse_tensors(Mp):
    cholMp  = tf.linalg.cholesky(Mp)
    icholMp = tf.linalg.inv(cholMp)
    iMp = tf.tensordot(tf.transpose(icholMp),icholMp,axes=0)
    return iMp 

iMps = list(map(inverse_tensors,list_tensors))  

希望这能回答你的问题,快乐学习!


推荐阅读