a = np.array([[1, 2],
[3, 4]])
b = np.array([[5, 6],
[7, 8]])
np.concatenate([a, b], axis=1)
concatenate関数で2次元の配列同士を結合する場合、「axis=1」を指定すると列方向への結合になります。デフォルトは「axis=0」で行方向への連結になります。
配列をそれぞれの引数で結合すると、以下の結果になります。
【axis=0】
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
【axis=1】
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
1次元と2次元など、次元数が違う場合は結合できません。また、1次元と1次元の結合は「axis=1」の軸がないため「axis=0」の結合となります。その場合、例えば[0, 1]と[2, 3]を結合すると[0, 1, 2, 3]となり、次元数は増えません。
2次元の配列同士を結合する場合、次の関数を使っても同じ結果になります。
【concatenate関数のaxis=0】
np.vstack([a, b])
【concatenate関数のaxis=1】
np.hstack([a, b])
vstackはverticalで垂直方向(行方向)、hstackはhorizontalで水平方向(列方向)への結合になります。
vsplitとhsplitは、結合ではなく分割する関数です。
次の配列で考えます。
c = np.array([[1, 2, 3],
[4, 5, 6]])
【vsplit(行方向の分割)】
d, f = np.vsplit(c, [1])
d ▶︎ array([[1, 2, 3]])
f ▶︎ array([[4, 5, 6]])
【hsplit(列方向の分割)】
d, f = np.hsplit(c, [2])
d ▶︎ array([[1, 2], [4, 5]])
f ▶︎ array([[3], [6]])
2つ目の引数の[1]や[2]は、分割する場所を指定します。分割の場所は「間」を指します。行の場合、1行目の前が[0]となるため、[1]を指定した場合は1行目と2行目の間を指します。例えば10行のデータを2等分する場合は、[5]を指定すれば5行目と6行目の間で分割されます。100行を2等分する場合は[50]を指定することになり、直感的に指定できます。