概要
numpy.r_
/ numpy.c_
は配列を結合するオブジェクト。r_
は縦方向に配列を結合し、c_
は横方向に配列を結合する。vstack() / hstack()
やlinspace()
と似たような使い方ができるが、少し癖がある。
- 配列と数値を混在させて結合できる
- スライスでステップ数やか分割数を指定して数列をつくれる
vstack()
やhstack()
の代わりに使える
vstack()
やhstack()
と同じように使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import numpy as np a1 = np.array([ [1, 2, 3], [4, 5, 6] ]) a2 = np.array([ [10, 20, 30], [40, 50, 60] ]) print(np.r_[a1, a2]) # [[ 1 2 3] # [ 4 5 6] # [10 20 30] # [40 50 60]] print(np.c_[a1, a2]) # [[ 1 2 3 10 20 30] # [ 4 5 6 40 50 60]] |
r_
について
numpy.r_
で2次元配列に1行だけ追加するとき、1次元配列のままだ”次元が異なる”とエラー。素直にvstack()
を使った方がよい。
1 2 3 4 5 6 7 8 |
a3 = np.array([10, 20, 30]) #print(np.r_[a1, a3]) # -> ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 1 dimension(s) print(np.r_[a1, a3.reshape(1, -1)]) # [[ 1 2 3] # [ 4 5 6] # [10 20 30]] |
r_
のデフォルトで1次元配列同士を結合すると、単に横方向に結合される。配列と要素が混在していてもok。文字列の配列も結合できるが、文字列要素が混在するとエラーになる。
1 2 3 4 5 6 7 8 |
print(np.r_[[1, 2, 3], 4, 5, [6, 7]]) # [1 2 3 4 5 6 7] print(np.r_[['A', 'B', 'C'], ['D', 'E']]) # ['A' 'B' 'C' 'D' 'E'] #print(np.r_[['A', 'B', 'C'], 'D', 'E', ['E', 'F']]) # -> ValueError: special directives must be the first entry. |
スライスを使って数列を生成。
1 2 3 4 5 6 7 8 |
print(np.r_[:10]) # [0 1 2 3 4 5 6 7 8 9] print(np.r_[4:10:2]) # [4 6 8] print(np.r_[0.5:5.5:0.5]) # [0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. ] |
3つ目の引数に'j'
をつけてnumpy.linspace()
と同様の動作。このときは終了値が含まれる。
1 2 |
print(np.r_[0:10:5j]) # [ 0. 2.5 5. 7.5 10. ] |
c_
について
numpy.c_
で2次元配列にその行数と同じ要素数の1次元配列を結合すると、列ベクトルとみなされて1列追加される。hstack()
が1次元配列を列ベクトル化する必要があるのに比べると手軽。
1 2 3 4 |
a5 = np.array([10, 20]) print(np.c_[a1, a5]) # [[ 1 2 3 10] # [ 4 5 6 20]] |
さらに要素数が同じ1次元配列同士を結合すると、それらが列ベクトルとみなされて結合される。
1 2 3 4 5 6 7 |
b1 = np.array([1, 2, 3]) b2 = np.array([4, 5, 6]) print(np.c_[b1, b2]) # [[1 4] # [2 5] # [3 6]] |
空の配列に対して順次列ベクトルを追加する場合には、empty(n, 0, dtype=type)
を準備する。
1 2 3 4 5 6 7 8 9 10 11 12 |
b0 = np.empty((3, 0), dtype=int) b0 = np.c_[b0, b1] print(b0) # [[1] # [2] # [3]] b0 = np.c_[b0, b2] print(b0) # [[1 4] # [2 5] # [3 6]] |