これはnumpyを使用しています。これは、必要なものに興味深いことに近いものです。サブマトリックスビューdを更新すると、バッキングマトリックスaを更新できます。
a = array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
print a
array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
d = a[1:4,1:4]
print d
array([[0, 1, 0],
[1, 0, 0],
[0, 0, 0]])
d[1,1]=9
print a
array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 9, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
これは素晴らしいです、私が望んでいたように、9はバッキング配列aに表示されます。
OK、これが摩擦です。代わりに、numpyの部分行列ビュー配列dまたはdのビューddを、2Dではなく1D行列として定式化する必要がある場合、どのように行いますか?以下はそれを行うことができません。
dd = d.reshape(9)
print dd
array([0, 1, 0, 1, 9, 0, 0, 0, 0])
dd[7]=7
print dd
array([0, 1, 0, 1, 9, 0, 0, 7, 0])
print a
array([[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 1, 9, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
私は7がバッキングアレイに表示されるのを見たいと思っていました。d部分行列ビューを2Dに制限する必要はないことに注意してください。そもそも、d部分行列ビューの1D定義は、そのようなものが存在する場合、完全に細かい定式化になります。