簡単に言えば、私がやりたいことは次のとおりです
A = np.ones((3,3)) #arbitrary matrix
B = np.ones((2,2)) #arbitrary matrix
A[1:,1:] = A[1:,1:] + B
Tensorflow を除いて (行列が任意に複雑なテンソル式になる場合があります)。どちらA
もB
Tensorflow 変数ではなく、ありふれたテンソルです。
これまでに収集したもの: テンソルは不変であるため、部分行列に割り当てることはできません。tf.scatter_nd
サブ割り当ての現在のオプションですが、サブマトリックスをサポートしていないようで、スライスのみをサポートしています。
機能するはずですが、おそらく理想的ではないメソッド:
- B をゼロでパディングすることもできますが、これは不必要に大きな B のインスタンス化につながると確信しています。スパースにすることはできますか?
A+U.dot(B).U.T
パディングのアイデアを使用することもできますが、たとえば Numpy で低ランクの分解として記述しU
ます。これが実際に有利かどうかはわかりません。- サブマトリックスに分割
A
し、それらを積み重ねることができます。最も効率的かもしれませんが、コードが複雑になるようです。
理想的には、行列が徐々に小さくなるようにこの操作を N 回実行して、1 つの大きな最終結果を得たいと考えていますが、これは接線方向です。
今のところハックの 1 つを使用しますが、慣用的なバージョンが何であるかを誰かが教えてくれることを願っています!