12/9(月) 応用科学学会シンポジウムで自動運転に関する講演を担当します☆彡(試乗会もあります!来て!)

16-21. Pythonのaxisを図で理解する

やること

Python の numpy(○なむぱい、×なんぴー)は優秀な数値計算モジュールであり、配列の合計値を求める際は for文で要素を1つ1つ処理するよりも np.sum() のメソッドで処理したほうが良いです。

np.sum() の他にも、

  • np.mean(), np.average() 平均値
  • np.median() 中央値
  • np.max() 最大値
  • np.min() 最小値
  • np.std() 標準偏差
  • np.var() 分散

があります。

さて、いずれも多次元配列においてどの軸で処理するかという「axis=」のオプションがありますが、「axis=1ってどの方向だっけ?」と迷う方もいると思います。今回は axis をマスターしたいと思います。

実行環境

WinPython3.6をおすすめしています。

WinPython - Browse /WinPython_3.6/3.6.7.0 at SourceForge.net
Portable Scientific Python 2/3 32/64bit Distribution for Windows

Google Colaboratoryが利用可能です。

Google Colab

配列の用意

適当な3次元配列を用意しました。

import numpy as np

a = np.array([[[0, 1], [0, 1], [0, 1], [0, 1]],
              [[0, 1], [0, 1], [0, 1], [0, 1]],
              [[0, 1], [0, 1], [0, 1], [0, 1]]])

次のようなイメージです。

基本編

axisなし

axis が指定されない場合は全要素の和が返ります。

print(np.sum(a))
12
axis=0
print(np.sum(a, axis=0))
[[0 3]
 [0 3]
 [0 3]
 [0 3]]
axis=1
print(np.sum(a, axis=1))
[[0 4]
 [0 4]
 [0 4]]
axis=2
print(np.sum(a, axis=2))
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]

応用編

実は axis=(0, 1) のように複数軸を指定することもできます。

axis=(0, 1)
print(np.sum(a, axis=(0, 1)))
[ 0 12]
axis=(0, 2)
print(np.sum(a, axis=(0, 2)))
[3 3 3 3]
axis=(1, 2)
print(np.sum(a, axis=(1, 2)))
[4 4 4]

まとめ

これらの図がイメージできれば迷うことはないでしょう!

SNS等でお気軽にご連絡ください

※当ブログに関することは何でもご相談・ご依頼可能です(Servicesになくても)
※TwitterはFF外の場合はDMではなく返信orメンションでお願いしますm(_ _)m

情報発信しています

質問・コメントはSlackやDiscordでお気軽に

勉強会の告知はこちらで

[H] 小ネタ / 検証
この記事を書いた人

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

この記事をシェアする
Vignette & Clarity(ビネット&クラリティ)
タイトルとURLをコピーしました