用語比較
np.concatenateとnp.stackの違い|既存の軸につなぐか、新しい軸を作るか(Python3データ分析)
np.concatenate は配列を既存の軸に沿ってつなぎ、np.stack は新しい軸を作って重ねます。次元が増えないのが concatenate、1つ増えるのが stackと覚えると、取り違えません。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
np.concatenateとnp.stackの要点
np.concatenate
既存の軸に沿って配列をつなぐ。axis の既定値は0。つなぐ軸以外の次元は、すべての配列で同じ形にする。次元の数は変わらない。
np.stack
新しい軸に沿って配列を重ねる。すべての配列が同じ形でなければならない。結果は入力より1次元多い。
違いを表で確認
| 比較軸 | np.concatenate | np.stack |
|---|---|---|
| 軸の扱い | 既存の軸に沿ってつなぐ | 新しい軸を作って重ねる。axis は、結果のどの位置に新しい軸を置くかを表す |
| 結果の次元数 | 入力と同じ | 入力より1つ多い |
| 入力の形の条件 | つなぐ軸の次元以外が同じ形であればよい | すべての配列が同じ形でなければならない |
| axis の既定値 | 0。axis=None にすると、配列を平らにしてからつなぐ | 0。axis=-1 なら、新しい軸が最後の次元になる |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
行や列を足して、表を長く・広くしたい人
concatenate を使います。公式の例では、2行2列の a に1行2列の b を axis=0 でつなぐと、3行2列になります。
同じ形の配列を束ねて、1次元増やしたい人
stack を使います。公式の例では、長さ3の配列2本を np.stack((a, b)) で重ねると、2行3列の配列になります。
配列の長さが違うのに stack しようとして、エラーが出た人
stack は、すべての配列が同じ形であることを求めます。形が違うなら、まず形を揃えるか、concatenate でつなげる形かを確かめます。
具体例で使い分ける
例 1
concatenate で行を足す
公式の例の a = np.array([[1, 2], [3, 4]]) と b = np.array([[5, 6]]) を見ます。
- a は2行2列、b は1行2列です。つなぐ軸は axis=0(行の方向)です。
- np.concatenate((a, b), axis=0) は、a の下に b を足します。
- 結果は array([[1, 2], [3, 4], [5, 6]]) で、3行2列です。次元の数は2のままです。
結論: concatenate は、つなぐ軸の長さだけが変わり、次元は増えません。
例 2
axis=None で平らにしてつなぐ
同じ a と b に、axis=None を渡す場合を見ます。
- 公式は、axis が
Noneのとき、配列は平らにされてからつながれると書いています。 - np.concatenate((a, b), axis=
None) の結果は array([1, 2, 3, 4, 5, 6]) です。 - 2次元の配列を渡しても、結果は1次元になります。
結論: axis=None は、形を気にせず1本の配列にしたいときの指定です。
例 3
stack で新しい軸を作る
公式の例の a = np.array([1, 2, 3]) と b = np.array([4, 5, 6]) を見ます。
- a と b は、どちらも長さ3の1次元配列で、同じ形です。
- np.stack((a, b)) の結果は array([[1, 2, 3], [4, 5, 6]]) で、2行3列の2次元配列です。
- np.stack((a, b), axis=-1) の結果は array([[1, 4], [2, 5], [3, 6]]) で、3行2列です。
結論: stack は次元を1つ増やします。axis で、新しい軸を置く位置を選べます。
問題文から答えを選ぶ手順
- 1
次元を増やしたいかを決める
次元を増やさず、長さだけを伸ばしたいなら concatenate。同じ形の配列を束ねて次元を増やしたいなら stack です。
- 2
入力の形を確かめる
stack は全配列が同じ形であることが条件です。concatenate は、つなぐ軸以外の次元が同じならつなげます。
- 3
axis を決める
concatenate では、つなぐ軸を指定します。stack では、新しい軸を置く位置を指定します。
試験での見分け方
- 1既存の軸に沿ってつなぐには concatenate を使う。
- 2新しい軸を作って重ねるには stack を使う。
- 3stack の結果は、入力より1次元多い。
- 4concatenate で axis=
Noneを渡すと、配列を平らにしてからつなぐ。
誤答しやすい選択肢
stack でも次元は変わらないと考える
修正: stack の結果は、入力より1次元多い配列です。長さ3の配列2本は、2行3列になります。
concatenate では配列の形が完全に同じでなければならないと考える
修正: 公式は、つなぐ軸に対応する次元以外が同じ形であればよいと書いています。
stack の axis を、つなぐ軸だと考える
修正: stack の axis は、結果の配列のどの位置に新しい軸を置くかを表します。
確認問題
Q1既存の軸に沿って配列をつなぐのは、concatenateとstackのどちらか?
答え: concatenate
公式は、concatenate を「既存の軸に沿って結合」、stack を「新しい軸に沿って結合」と説明しています。
Q2np.stack((a, b))、a=[1, 2, 3]、b=[4, 5, 6] の結果の形は?
答え: 2行3列
stack は新しい軸を作るので、1次元の配列2本が2次元になります。結果は array([[1, 2, 3], [4, 5, 6]]) です。
Q32行2列の a と1行2列の b を、np.concatenate((a, b), axis=0) でつなぐと何行何列か?
答え: 3行2列
行の方向に b を足すので、行数が 2 + 1 = 3 になります。
Q4np.concatenate で axis=None を渡すとどうなるか?
答え: 配列を平らにしてからつなぐ
公式に、axis が None のとき配列は平らにされてから使われると書かれています。
到達チェック
- concatenate と stack の違いを、軸の言葉で説明できる
- stack の結果が入力より1次元多いことを言える
- stack の入力に必要な条件を答えられる
- axis=
Noneのときの動きを言える
関連ページで確認する
同じ資格で次に知りたいこと
- np.stdとpandasのstdの違い|ddofの既定値は0と1(Python3データ分析)
NumPyのnp.stdとpandasのSeries.std・DataFrame.stdで、同じデータなのに標準偏差が違って見える理由を、ddofの既定値(NumPyは0、pandasは1)で整理します。pandas公式の例のpd.Series([1, 2, 3])が1.0と0.816496580927726になる計算つきです。
- np.ravelとflattenの違い|必要なときだけコピーするか、常にコピーを返すか(Python3データ分析)
NumPyのnp.ravel(コピーは必要なときだけ)とndarray.flatten(常にコピーを返す)の違いを、戻り値、order引数、元の配列への影響で整理します。NumPy公式リファレンスの例のnp.ravel(x, order='F')が[1, 4, 2, 5, 3, 6]になる計算つきです。
- np.meanとnp.averageの違い|重みを付けられるのはどちらか(Python3データ分析)
NumPyのnp.mean(算術平均)とnp.average(加重平均)の違いを、weights引数、returned引数、重みの合計が0のときの動きで整理します。NumPy公式リファレンスの例で照合した、np.average(np.arange(1, 11), weights=np.arange(10, 0, -1))が4.0になる計算つきです。
よくある質問
Qnp.concatenateとnp.stackの違いは?
concatenate は既存の軸に沿って配列をつなぎ、次元は変わりません。stack は新しい軸を作って重ね、結果は入力より1次元多くなります。
Qstack には、形の違う配列を渡せますか?
公式は、各配列が同じ形でなければならないと書いています。
Qnp.concatを使ってもよいですか?
公式に、NumPy 2.0 で numpy.concat が numpy.concatenate の短縮名として追加されたと書かれています。
Qデータ分析試験の範囲?
本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
