前回は NumPy の話を一回休みして TeX の話をしましたので前々回の続きです。
配列を並べるためのヘルパー関数
NumPy の名前空間には _r と _c という特殊なオブジェクトがあります。これらを使うと配列を簡単に構築することができます。
_r 関数
_r 関数は、第 1 の軸に沿ってスライスオブジェクトに変換します。
- インデックス式がカンマで区切られた配列が含まれている場合はスタック
- インデックス式がスライス表記やスカラー数が含まれている場合は、スライス表記で示される範囲との 1 次元配列
スライス表記とは start:stop:step のことで、これは np.arange(start, stop, step) と等価になります。
戻り値には連結された配列または Matrix オブジェクトが返ります。
np.r_[np.array([1,2,3]), 0, 0, np.array([4,5,6])]
#=> array([1, 2, 3, 0, 0, 4, 5, 6])
np.r_[-1:1:6j, [0]*3, 5, 6]
#=> array([-1. , -0.6, -0.2, 0.2, 0.6, 1. , 0. , 0. , 0. , 5. , 6. ])
a = np.array([[0, 1, 2], [3, 4, 5]])
np.r_['-1', a, a]
#=> array([[0, 1, 2, 0, 1, 2],
# [3, 4, 5, 3, 4, 5]])
np.r_['0,2', [1,2,3], [4,5,6]]
#=> array([[1, 2, 3],
# [4, 5, 6]])
np.r_['0,2,0', [1,2,3], [4,5,6]]
#=> array([[1],
# [2],
# [3],
# [4],
# [5],
# [6]])
np.r_['1,2,0', [1,2,3], [4,5,6]]
#=> array([[1, 4],
# [2, 5],
# [3, 6]])
np.r_['r',[1,2,3], [4,5,6]]
#=> matrix([[1, 2, 3, 4, 5, 6]])
_c 関数
_c 関数は、第 2 の軸に沿ってスライスオブジェクトに変換します。
これは np.r_['-1,2,0', index expression] と等価であり、つまりは np.r_ の略記のような役割を果たします。
np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
#=> array([[1, 2, 3, 0, 0, 4, 5, 6]])
また _r と _c 関数はスライスを配列に変換できます。
np.c_[1:6, -10:-5]
#=> array([[ 1, -10],
# [ 2, -9],
# [ 3, -8],
# [ 4, -7],
# [ 5, -6]])