Numpy20本ノック
問題その15 行列の結合
つぎの行列を使って以下の項目に従い、結合を行ってください。
A = np.array([[0,1,-1],[2,4,-3],[5,-2,7]])
A
array([[ 0, 1, -1],
[ 2, 4, -3],
[ 5, -2, 7]])
B = np.array([[-2,0,1],[5,-1,2],[-6,3,4]])
B
array([[-2, 0, 1],
[ 5, -1, 2],
[-6, 3, 4]])
とりあえず、問題文の行列を定義しました。
そしてまずは縦方向の結合。
Numpyメソッドのvstack()というのを使うみたいです。
vstackのvは垂直を意味するverticalだそうです。
C = np.vstack((A,B))
C
array([[ 0, 1, -1],
[ 2, 4, -3],
[ 5, -2, 7],
[-2, 0, 1],
[ 5, -1, 2],
[-6, 3, 4]])
次は横方向です。
こちらはnp.hstack() でこのhは水平を意味するHorizontalの略です。
D = np.hstack((A,B))
D
array([[ 0, 1, -1, -2, 0, 1],
[ 2, 4, -3, 5, -1, 2],
[ 5, -2, 7, -6, 3, 4]])
問題その16 行列の分解
先ほどの結合の部分で作成した行列をつかい
以下の項目で分解を行ってください。
まずは縦方向への分割です。メソッドの名前が
np.vsplitです。結合の時と同じでvは垂直を意味するverticalです。
同様に水平方向への2分割は hsplitです。
#Cを2分割
np.vsplit(C,2)
[array([[ 0, 1, -1],
[ 2, 4, -3],
[ 5, -2, 7]]),
array([[-2, 0, 1],
[ 5, -1, 2],
[-6, 3, 4]])]
#Cを3分割
np.vsplit(C,3)
[array([[ 0, 1, -1],
[ 2, 4, -3]]),
array([[ 5, -2, 7],
[-2, 0, 1]]),
array([[ 5, -1, 2],
[-6, 3, 4]])]
#Dを水平方向に2分割
np.hsplit(D,2)
[array([[ 0, 1, -1],
[ 2, 4, -3],
[ 5, -2, 7]]),
array([[-2, 0, 1],
[ 5, -1, 2],
[-6, 3, 4]])]
コメント