AI資格ドリル
資格を選ぶ

用語比較

np.concatenateとnp.stackの違い|既存の軸につなぐか、新しい軸を作るか(Python3データ分析)

np.concatenate は配列を既存の軸に沿ってつなぎ、np.stack は新しい軸を作って重ねます。次元が増えないのが concatenate、1つ増えるのが stackと覚えると、取り違えません。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

np.concatenateとnp.stackの要点

np.concatenate

既存の軸に沿って配列をつなぐ。axis の既定値は0。つなぐ軸以外の次元は、すべての配列で同じ形にする。次元の数は変わらない。

np.stack

新しい軸に沿って配列を重ねる。すべての配列が同じ形でなければならない。結果は入力より1次元多い。

違いを表で確認

比較軸np.concatenatenp.stack
軸の扱い既存の軸に沿ってつなぐ新しい軸を作って重ねる。axis は、結果のどの位置に新しい軸を置くかを表す
結果の次元数入力と同じ入力より1つ多い
入力の形の条件つなぐ軸の次元以外が同じ形であればよいすべての配列が同じ形でなければならない
axis の既定値0。axis=None にすると、配列を平らにしてからつなぐ0。axis=-1 なら、新しい軸が最後の次元になる

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

行や列を足して、表を長く・広くしたい人

concatenate を使います。公式の例では、2行2列の a に1行2列の b を axis=0 でつなぐと、3行2列になります。

02

同じ形の配列を束ねて、1次元増やしたい人

stack を使います。公式の例では、長さ3の配列2本を np.stack((a, b)) で重ねると、2行3列の配列になります。

03

配列の長さが違うのに 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. 1

    次元を増やしたいかを決める

    次元を増やさず、長さだけを伸ばしたいなら concatenate。同じ形の配列を束ねて次元を増やしたいなら stack です。

  2. 2

    入力の形を確かめる

    stack は全配列が同じ形であることが条件です。concatenate は、つなぐ軸以外の次元が同じならつなげます。

  3. 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 のときの動きを言える

同じ資格で次に知りたいこと

よくある質問

Qnp.concatenateとnp.stackの違いは?

A

concatenate は既存の軸に沿って配列をつなぎ、次元は変わりません。stack は新しい軸を作って重ね、結果は入力より1次元多くなります。

Qstack には、形の違う配列を渡せますか?

A

公式は、各配列が同じ形でなければならないと書いています。

Qnp.concatを使ってもよいですか?

A

公式に、NumPy 2.0 で numpy.concat が numpy.concatenate の短縮名として追加されたと書かれています。

Qデータ分析試験の範囲?

A

本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)