在Tensorflow中更新子矩阵

时间:2017-01-18 15:10:46

标签: indexing tensorflow linear-algebra idiomatic submatrix

很简单,我想要做的是以下

A = np.ones((3,3)) #arbitrary matrix
B = np.ones((2,2)) #arbitrary matrix
A[1:,1:] = A[1:,1:] + B 

除了在Tensorflow中(矩阵可以是任意复杂的张量表达式)。 AB都不是Tensorflow变量,而只是一个普通的张量。

到目前为止我收集的内容:张量是不可变的,因此我无法分配给子矩阵。 tf.scatter_nd是子赋值的当前选项,但似乎不支持子矩阵,只支持切片。

应该有效的方法,但可能并不理想:

  • 我可以用零填充B,但我确信这会导致实例化 一个不必要的大B - 可能是稀疏的,也许?
  • 我可以使用填充的想法,但将其写为低秩分解,例如在Numpy中:A+U.dot(B).U.T其中U是堆叠的零和单位矩阵。我不确定这实际上是否有利。
  • 我可以将A拆分成子矩阵,然后将它们重叠在一起。可能是效率最高的,但听起来像代码会令人费解。

理想情况下,我希望对逐渐变小的矩阵执行N次操作N次,从而产生一个较大的最终结果,但这是切线的。

我现在会使用其中一个黑客,但我希望有人可以告诉我这个惯用的版本是什么!

0 个答案:

没有答案