2

很简单,我想做的是以下

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

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

到目前为止我收集到的内容:张量是不可变的,所以我不能分配给子矩阵。tf.scatter_nd是子分配的当前选项,但似乎不支持子矩阵,仅支持切片。

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

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

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

我现在将使用其中一种技巧,但我希望有人能告诉我惯用的版本是什么!

4

0 回答 0