2012-06-19 5 views

答えて

11

正確にはそうではありませんが、配列スライス表記法を使用すると、自分で簡単に行うことができます。

>>> A = np.linspace(0,24,25).reshape([5,5,]) 
>>> A 
array([[ 0., 1., 2., 3., 4.], 
     [ 5., 6., 7., 8., 9.], 
     [ 10., 11., 12., 13., 14.], 
     [ 15., 16., 17., 18., 19.], 
     [ 20., 21., 22., 23., 24.]]) 

メイクBは中左上の2x2:あなたはデータをコピーする必要がある場合はBがビューであることを

>>> B = A[0:2,0:2] 

注意、それは

>>> B[1,1] = 60 
>>> print A 
[[ 0. 1. 2. 3. 4.] 
[ 5. 60. 7. 8. 9.] 
[ 10. 11. 12. 13. 14.] 
[ 15. 16. 17. 18. 19.] 
[ 20. 21. 22. 23. 24.]] 

でデータを共有しますAからコピー方法を使用してください:

>>> B = A[0:2,0:2].copy() 
>>> B 
array([[ 0., 1.], 
     [ 5., 60.]]) 
>>> B[1,1] = 600 
>>> B 
array([[ 0., 1.], 
     [ 5., 600.]]) 
>>> A 
array([[ 0., 1., 2., 3., 4.], 
     [ 5., 60., 7., 8., 9.], 
     [ 10., 11., 12., 13., 14.], 
     [ 15., 16., 17., 18., 19.], 
     [ 20., 21., 22., 23., 24.]]) 
2

私は同じ問題が見つかったいくつかの組み込みのnumpyの機能4つの部分行列に私の行列を分割するために(私の行列がサイズで2^N * 2^N)ここで

は、私が書いたコードです:

upper_half = np.hsplit(np.vsplit(my_matrix, 2)[0], 2) 
lower_half = np.hsplit(np.vsplit(my_matrix, 2)[1], 2) 

upper_left = upper_half[0] 
upper_right = upper_half[1] 
lower_left = lower_half[0] 
lower_right = lower_half[1] 

numpyのを使用してそれらを再結合するためのボーナス:

C=np.vstack([np.hstack([c11, c12]), np.hstack([c21, c22])]) 

vsplit hsplit hstackとその目的

のために作られているように見えるvstack
関連する問題