NumPyの次元追加の方法を探る
執筆者:南波真之
※本記事は吉政創成株式会社「Python学習とキャリアアップ」より寄稿されたコラムとなります。

皆さん、こんにちは。南波真之(なんばさねゆき)と申します。
私はエンジニアではない文系の人間ですが、Pythonの可能性やデータ分析を使った仕事に興味があります。
前回はPythonの標準機能に追加しての数値計算や多次元配列を利用できるNumPyを使ったPythonの値コピーの考え方について紹介してきました。参照とコピーという2つがあり、それぞれの特徴がありますので興味のある方はぜひ御覧ください。
今回も、NumPy(ナムパイ)ですが、その中でも次元追加について取り上げます。
次元というと多次元配列という言葉が思い浮かびますが、データの表現の仕方としてとても都合がいいものです。実はNumPyを使うととても簡単に実現できます。
NumPyによる配列、ndarrayについて
NumPyを使うと、Pythonが標準でもっているデータ構造のリスト型に比べて多次元配列のデータを扱えるようになります。配列用のデータ型はndarrayといいます。
配列(array)は一般的に、情報を記憶しておくための箱としての変数の一つで、複数の箱が連なっているものを示します。
1次元配列
例えば、シンプルな1次元配列の場合はこのようになります。
出力:変数aに配列のデータが格納された
次に、変数aのデータタイプを確認
出力:ndarrayが出力された
.shapeを使って、データの形を確認する
出力:要素が3つの1次元配列
2次元配列
次に2次元配列を見てみます。
出力:変数bに2次元配列のデータが格納された
array([[2, 4, 6],
[3, 6, 9]])
2次元配列が格納されている変数bのデータタイプを確認
出力:ndarrayが出力された
.shapeを使って、データの形を確認する
出力:2×3の行列であることがわかる(2行3列のデータ)
次元追加について
ここまでで1次元、2次元についてわかりましたので、この次元を追加する場合について考えてみます。例えば、2次元→3次元というような場合です。
色々調べてみると、実は次元追加にはいくつか方法があることがわかりました。その使い分けについて疑問に思いましたので書いていこうと思います。
次元追加の方法としては3つありました。
- np.newaxis
- reshape
- np.expand_dims
1. np.newaxis
まずは、np.newaxisです。NumPyを使うことで定義されているnewaxisという変数を使って次元を追加するという方法で、使い方としては、次元を追加したい場所にnp.newaxisを入れてあげて、スライスの書き方を使う形となります。
例:先程の変数bを使って次元追加
出力:cを出力したときに[]が1つ増えているのがわかる
array([[[2, 4, 6],
[3, 6, 9]]])
次に、.shapeを使って、データの形を確認
出力: np.newaxisを入れたところに次元ができている
これで次元追加がされたことになります。
np.newaxisは次元を追加したい場所に入れられるため、例えばこのような使い方もできます。
新しく用意した変数dに対して次元追加
出力:cを出力したときに[]が1つ増えているのがわかる
.shapeを使って、データの形を確認
出力:np.newaxisを入れたところに次元ができている
このように次元追加の場合にとても簡単に使うことができるのがnewaxisです。意味もそのままnew(新しい)axis(軸)で分かりやすいですね。
このnp.newaxisはもう1つの書き方があり、それがNoneになります。
Noneのほうも使われているようですが最初のうちはnp.newaxisを使うほうが分かりやすいと思います。
例:np.newaxisの代わりにNoneで次元追加を確認
出力:次元追加されている事がわかる
array([[[2, 4, 6],
[3, 6, 9]]])
.shapeを使って、データの形を確認
出力:Noneを入れたところに次元ができている
2.reshape
次の書き方は、NumPyのreshapeというメソッドを使う方法です。特徴としては、要素数を指定する必要があるところです。
例:新しい1次元配列を用意
出力
.shapeを使って、データの形を確認
出力:要素が9つの1次元配列
この変数fに対して、3行3列に次元追加
出力:次元が追加されている事がわかる
array([[ 1, 2, 4],
[ 6, 8, 10],
[14, 19, 29]])
.shapeを使って、データの形を確認
出力: 次元が指定した通りにできている
※ちなみに、 g = np.reshape(f, (3, 3)) のような書き方もできますが、明らかにf.reshape((3, 3))としたほうが分かりやすいですね。
先程のnp.newaxisとの違いは書き方の違いだけのようです。
3.np.expand_dims()
この書き方が載っているWebの記事なども見かけます。NumPyのドキュメントを確認すると、バージョン1.13.0以降、非推奨となっていました。
執筆時点ではNumPy 1.21までリリースされているため、np.expand_dims()を見かけたら、np.newaxisか、reshapeを使うのが良さそうです。
今回は、NumPyの次元追加について書いてきました。 Pythonでデータ分析をする上では、NumPyは必須項目です。理解すべき項目も多いですが、細かい部分を理解しておくことで応用が効くようになると思いますので、頑張りましょう。 インターネット・アカデミーは、Python講座が充実しています。Python認定スクールにもなっているため質の高い知識を得ることができ、基礎学習の先にあるそれぞれの目標を目指していくためには良い場所となります。ご興味ある方は各講座のページを覗いてみてください。
PythonではNumPyをうまく使おう
南波真之
デジタル人材育成・助成金のお役立ち資料をダウンロード

デジタル人材育成や助成金活用のお役立ち資料などをまとめてダウンロードしていただけます。コンサルタントへの無料相談をご希望の方はこちらからお問い合わせください。
- DX人材の育成&事例紹介 リスキリングのロードマップ付き
- デジタル人材育成に使える助成金制度
- デジタルスキル標準 役割別おすすめ講座