データの形を自由自在に操る第一歩!numpyのndimとshapeをマスターしよう

こんにちは。ゆうせいです。

プログラミングでデータを扱っているとき、自分が今触っているデータが一体どんな姿をしているのか分からなくなって、迷子になった経験はありませんか。

特にPythonでデータ分析やAIの学習を始めると、必ず出会うのがnumpy(ナンパイ)というライブラリです。このnumpyを使いこなす上で、データの次元を表すndimと、データのサイズを表すshapeの理解は避けて通れません。

一見難しそうに聞こえるかもしれませんが、実はとってもシンプルな考え方なのです。今日は、この二つの正体を、身近な例えを使いながら一緒に紐解いていきましょう!

データの階層を知るためのndim

まず、ndim(エヌディム)についてお話しします。これはn-dimensionの略で、日本語では次元数と呼びます。

次元と聞くと、SF映画のような少し難しいイメージを持つかもしれません。ですが、プログラミングの世界では、箱の中にどれだけ深い入れ子構造があるかを示しているだけなのです。

高校生の皆さんに馴染みのある例えで説明しましょう。

  1. 0次元(スカラー):ただの数字。例えるなら、机の上に置かれた1個のリンゴです。
  2. 1次元(ベクトル):数字が横一列に並んだもの。これは、リンゴがいくつか入った1本の細長い箱のような状態です。
  3. 2次元(行列):数字が縦と横に並んだもの。出席簿や時間割のように、行と列がある表のイメージですね。

ndimは、そのデータがリンゴそのものなのか、1列の箱なのか、それとも表なのかという種類を教えてくれる役割を持っています。

ndimのメリットと注意点

ndimを確認する最大のメリットは、計算ができる形かどうかを瞬時に判断できることです。

例えば、表形式のデータを期待しているプログラムに、ただの数字を放り込んでしまったらどうなるでしょうか。当然、エラーが出て止まってしまいます。あらかじめndimを確認する習慣をつければ、こうしたミスを未然に防げるのです。

ただし、ndimだけではデータが全部でいくつあるのかまでは分かりません。そこで登場するのが、次に説明するshapeです。

データの大きさを具体化するshape

shape(シェイプ)は、その名の通りデータの形を具体的に表す指標です。

ndimがデータの種類を教えてくれるのに対し、shapeはそれぞれの方向にデータがいくつ並んでいるのかを教えてくれます。

例えば、先ほどの出席簿を思い出してください。

クラスに30人の生徒がいて、5つの教科の点数が記録されているとしましょう。この場合、30行と5列のデータになります。shapeはこの状態を(30, 5)という形式で表現します。

shapeの見方を数式記号で表すと

ここで、少しだけ数式のような表現を使って、shapeの読み解き方を整理してみましょう。

例えば、縦に3つ、横に4つの数字が並んだ表がある場合、numpyでは次のように表現されます。

shape = (3, 4)

このとき、データの総数は掛け算で求めることができます。

データの総数 = 3 \times 4 = 12

このように、shapeを見れば全体像がはっきりと見えてくるのです。

ndimとshapeを実際に確認してみる

それでは、実際のコードでどのように表示されるか見てみましょう。以下のコードを読んで、結果を想像してみてください。

import numpy as np

array = np.array([[1, 2, 3], [4, 5, 6]])

print(array.ndim)

print(array.shape)

この場合、出力は以下のようになります。

2

(2, 3)

皆さんの予想は当たりましたか。

リストの中にリストが入っているので2次元、つまりndimは2となります。そして、2行3列の構成なので、shapeは(2, 3)となるわけです。

表で比べるndimとshapeの違い

二つの違いを整理するために、一覧表にまとめてみました。

特徴ndim(次元数)shape(形状)
何を教えてくれるかデータの階層の深さ各階層の要素の数
例え箱の構造(単なる列か、表か)箱のサイズ(縦いくつ、横いくつ)
出力例2(100, 50)
用途データ構造の整合性チェック計算時の行列サイズの確認

こうして並べてみると、お互いに補い合っている関係だということが分かりますね。

迷子にならないための学習指針

ここまで読んでくださった皆さんは、もうデータの形に怯える必要はありません!

これからnumpyを使って高度な計算や画像処理に挑戦していく際、もしプログラムが動かなくなったら、まずは落ち着いてndimとshapeを表示させてみてください。

これからの学習のステップとして、以下のことを意識してみると上達が早くなります。

  1. 自分で配列を作るときに、あえて複雑な形にしてndimを表示させてみる。
  2. shapeの数字を掛け算して、要素の総数と一致するか確認する。
  3. reshapeという、shapeを書き換える魔法のような関数についても調べてみる。

自分の扱っているデータの正体を見失わないこと。それが、データサイエンスの荒波を乗りこなす一番の秘訣です。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。