AI資格ドリル
資格を選ぶ

用語比較

NumPyのaxis=0とaxis=1の違い|列ごとの集計と行ごとの集計(Python3データ分析試験)

違いは、計算する向きです。2次元配列でaxis=0は縦に集計して列ごとの結果を返し、axis=1は横に集計して行ごとの結果を返します。NumPy公式のクイックスタートの例では、sumのaxis=0が列ごと、minのaxis=1が行ごとの結果です。

Python3データ分析試験の公式の出題範囲には、NumPyの節(6問)があります。axisの出題の形式は受験前に公式の案内で確かめてください。

この記事の根拠と出典

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

axis=0とaxis=1の要点

axis=0

縦に集計し、列ごとに1つの結果を返す。3行4列のbでb.sum(axis=0)は、各列の合計 array([12, 15, 18, 21])。

axis=1

横に集計し、行ごとに1つの結果を返す。同じbでb.min(axis=1)は、各行の最小値 array([0, 4, 8])。

違いを表で確認

比較軸axis=0axis=1
集計される向き縦(行を順に重ねる向き)に集計する横(列を順に並べる向き)に集計する
3行4列の配列での結果の形列の数と同じ4個の値(列ごとの結果)行の数と同じ3個の値(行ごとの結果)
公式の例(b = np.arange(12).reshape(3, 4))b.sum(axis=0) は array([12, 15, 18, 21])。各列の合計b.min(axis=1) は array([0, 4, 8])。各行の最小値
累積和(cumsum)での違い各列に沿って上から下へ足し上げるb.cumsum(axis=1) は各行に沿って左から右へ足し上げ、形は3行4列のまま。1行目は [0, 1, 3, 6]
pandasでの対応df.mean() は列ごとの平均を計算する(既定の向き)df.mean(axis=1) は行ごとの平均を計算する

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

PR

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

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

01

axisの数字がどちらの向きか覚えられない人

「axis=0は列ごとの結果が出る」と、出力の形で覚えます。3行4列なら、axis=0は4個、axis=1は3個の値が返ります。

02

sumとcumsumでaxisの効き方が違うと感じる人

sumは向きに沿って1つにまとめるので次元が1つ減り、cumsumは足し上げながら進むので配列の形は変わりません。向きの考え方は同じです。

03

NumPyとpandasで向きが逆だと思っている人

どちらもaxis=0は列ごと、axis=1は行ごとの結果になります。pandasのdf.mean()は何も指定しなくても列ごとの平均です。

具体例で使い分ける

例 1

列ごとの合計を求める

b = np.arange(12).reshape(3, 4) の、各列の合計を知りたい場面です。

  • bは [[0,1,2,3],[4,5,6,7],[8,9,10,11]] です。1列目は 0+4+8=12、2列目は 1+5+9=15 と、縦に足します。
  • 結果は array([12, 15, 18, 21]) で、列の数と同じ4個です。これがb.sum(axis=0)です。

結論: 列ごとの結果がほしいときはaxis=0。要素が4個の配列が返れば、列ごとだと確かめられます。

例 2

行ごとの最小値と累積和を求める

同じbで、各行の最小値と、各行に沿った累積和を知りたい場面です。

  • b.min(axis=1) は、各行の最小値 array([0, 4, 8]) を返します。要素は行の数と同じ3個です。
  • b.cumsum(axis=1) は各行に沿って足し上げ、[[0,1,3,6],[4,9,15,22],[8,17,27,38]] を返します。1行目の末尾6は 0+1+2+3 です。

結論: 行ごとの結果、または行に沿った処理はaxis=1。cumsumは形が変わらない点も確かめます。

問題文から答えを選ぶ手順

  1. 1

    配列の形を書き出す

    3行4列なら(3, 4)と書き、行と列のどちらについて結果がほしいかを決めます。

  2. 2

    返る値の個数から向きを決める

    列ごとの結果なら列の数(4個)、行ごとの結果なら行の数(3個)が返る向きを選びます。

  3. 3

    関数の種類を確かめる

    sum・minのようにまとめる関数は次元が減り、cumsumのように足し上げる関数は形が変わりません。

試験での見分け方

  • 1列ごとの合計・最小値などがほしいならaxis=0。
  • 2行ごとの合計・最小値などがほしいならaxis=1。
  • 33行4列で返る値が4個ならaxis=0、3個ならaxis=1。
  • 4cumsumにaxisを付けても、配列の形は変わらない。
  • 5pandasのdf.mean()は列ごと、df.mean(axis=1)は行ごと。

誤答しやすい選択肢

axis=0は行ごとの結果になると考える

修正: axis=0は列ごとの結果です。3行4列なら4個の値が返ることで確かめてください。

cumsum(axis=1)の結果を1行の配列だと思う

修正: cumsumは足し上げるだけで、形は3行4列のままです。公式の例でも3行の配列が返ります。

NumPyとpandasでaxisの意味が逆だと考える

修正: どちらもaxis=0は列ごと、axis=1は行ごとの結果です。pandasのdf.mean()は、axisを省くと列ごとの平均です。

確認問題

Q1b = np.arange(12).reshape(3, 4) のとき、b.sum(axis=0) は何を返すか?

答え: 各列の合計 array([12, 15, 18, 21])

axis=0は列ごとの結果を返します。1列目は 0+4+8=12 です。

Q2同じbで、b.min(axis=1) は何を返すか?

答え: 各行の最小値 array([0, 4, 8])

axis=1は行ごとの結果を返します。行は3つなので要素も3個です。

Q3pandasで、行ごとの平均を求める書き方は?

答え: df.mean(axis=1)

df.mean()は列ごとの平均で、axis=1を付けると行ごとの平均になります。

到達チェック

  • axis=0が列ごと、axis=1が行ごとの結果になると説明できる
  • 3行4列の配列で、返る値の個数から向きを判断できる
  • cumsumが形を変えないことを説明できる

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

よくある質問

QNumPyのaxis=0とaxis=1の違いは何ですか?

A

計算する向きです。2次元配列でaxis=0は列ごとの結果、axis=1は行ごとの結果を返します。NumPy公式の例では、3行4列のb.sum(axis=0)がarray([12, 15, 18, 21])、b.min(axis=1)がarray([0, 4, 8])です。

Qaxisを指定しないとどうなりますか?

A

この記事は公式のクイックスタートの例だけを扱っています。axisを省いたときの挙動は、NumPyの各関数の公式文書で確認してください。

QpandasのaxisはNumPyと同じですか?

A

pandas公式の10分間ガイドでは、df.mean()が列ごとの平均、df.mean(axis=1)が行ごとの平均です。向きの考え方は同じです。

QPython3データ分析試験で問われますか?

A

公式の出題範囲にNumPyの節(6問)があります。axisを使った集計の出題の形式は、受験前に公式の案内で確認してください。

次に見る比較

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