很简单,我想做的是以下
A = np.ones((3,3)) #arbitrary matrix
B = np.ones((2,2)) #arbitrary matrix
A[1:,1:] = A[1:,1:] + B
除了在 Tensorflow 中(矩阵可以是任意复杂的张量表达式)。既不是 Tensorflow 变量,也不是一个普通的张量A
。B
到目前为止我收集到的内容:张量是不可变的,所以我不能分配给子矩阵。tf.scatter_nd
是子分配的当前选项,但似乎不支持子矩阵,仅支持切片。
应该有效但可能并不理想的方法:
- 我可以用零填充 B,但我确信这会导致不必要的大 B 的实例化——它可以变得稀疏吗?
- 我可以使用填充的想法,但将其写为低秩分解,例如在 Numpy 中:
A+U.dot(B).U.T
其中U
是堆叠的零和单位矩阵。我不确定这实际上是否有利。 - 我可以拆分
A
为子矩阵,然后将它们堆叠在一起。可能是最有效的,但听起来代码会很复杂。
理想情况下,我想对逐渐变小的矩阵执行此操作 N 次,从而产生一个大的最终结果,但这是切线的。
我现在将使用其中一种技巧,但我希望有人能告诉我惯用的版本是什么!