テクノロジー

2024年11月15日

NumPyとは

NumPyとは、Pythonのサードパーティ製のパッケージであり、配列や行列を効率よく扱うことができます。

NumPyには配列を扱うためのndarrayと、行列を扱うためのmatrixという型があり、これらの型で要素を扱う場合はintfloatなど、特定のデータ型に揃える必要があります。

また、NumPyには関数やメソッドや用意されており、これらを利用することで高速に配列や行列の計算を行うことができます。

本テキストでは、データ分析で主に使用されるndarrayについて解説します。

著者プロフィール

IT分野における教育の先駆者として、多くのエンジニアを育成するプログラミングスクールの運営、Web開発やAI研修を行なっています。幅広いレベルの受講生に対して実践的なスキルを提供。生徒の成長を第一に考え、効果的で魅力的な教育プログラムの設計に情熱を注いでいます。

ゴール

  • NumPyの特徴と基本的な使い方を理解する

NumPyとは

NumPyとは、Pythonのサードパーティ製のパッケージであり、配列や行列を効率よく扱うことができます。

NumPyには配列を扱うためのndarrayと、行列を扱うためのmatrixという型があり、これらの型で要素を扱う場合はintfloatなど、特定のデータ型に揃える必要があります。

また、NumPyには関数やメソッドや用意されており、これらを利用することで高速に配列や行列の計算を行うことができます。

本テキストでは、データ分析で主に使用されるndarrayについて解説します。

NumPyのインポート

NumPyを使用するには、初めにインポートしておく必要があります。
NumPyをインポートするには、以下のようにコードを記述し、実行します。
後半に記述されているas npはインポートしたnumpyを以降ではnpと読み替えて使うという意味です。

import numpy as np

NumPyを使って配列を作成する

1次元配列

NumPyを使ってデータ構造の基本となる1次元配列を作成してみましょう。

NumPyで配列を扱う場合は、ndarray型で定義する必要があります。
試しに、[1, 2, 3]という配列をndarray型で定義してみましょう。

a = np.array([1, 2, 3])

このように、ndarrayを定義する場合はarray関数の引数に作成したい配列を渡してあげます。

ここでは、定義したndarrayを変数aに代入しています。
定義した配列の中身を確認してみましょう。

a

[実行結果]

array([1, 2, 3])

ndarrayの場合、arrayから始まる配列が出力されます。
試しに、Pythonのtype関数を使って変数aのオブジェクトの型を確認してみましょう。

type(a)

[実行結果]

numpy.ndarray

上記の結果から、変数aがNumPyのndarray型のオブジェクトであることが確認できます。

次にprint関数を使って、変数aを出力してみましょう。

print(a)

[実行結果]

[1 2 3]

このようにprint関数を使用することで、よりシンプルでわかりやすいフォーマットでndarrayを出力できます。

次に、NumPyのshapeメソッドを使ってデータ構造を確認してみましょう。

a.shape

[実行結果]

(3,)

これは、3つの要素を持つ1次元配列であることを意味します。

少し本題から外れますが、もし明示的に次元数を知りたい場合はndimメソッドを使って確認ができます。

a.ndim

[実行結果]

1

2次元配列

次に、2次元配列を定義してみましょう。
2次元配列を定義する場合は、以下のように[]をネストした記述になります。

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

上記では、定義した2次元配列を変数bに代入しています。
定義した配列の中身を確認してみましょう。

b

[実行結果]

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

2次元配列も1次元配列の時と同様、arrayから始まる配列が[]でネストした状態で出力されます。

shapeメソッドを使ってデータ構造を確認してみましょう。

b.shape

[実行結果]

(2, 3)

上記の結果は、2行3列からなる2次元配列であることを意味します。

  1列目 2列目 3列目
1行目 1 2 3
2行目 4 5 6

配列から要素を取得する

配列から要素を取得する方法について、ここでは、インデックスを指定する方法とスライスを使用する方法について説明します。
データを取得するための配列として、1次元配列と2次元配列を用意しておきましょう。

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

インデックス

インデックスを指定することで、配列の要素を取得できます。コンピュータの世界では歴史的な背景から、最初を0と数えるのが一般的です。

a[0]

[実行結果]

1

また、負のインデックスを指定することもできます。-1の場合、一番最後の要素を取得出来ます。

a[-1]

[実行結果]

3

2次元配列の場合も同じように、インデックスを使って要素を取得できます。

b[0]

[実行結果]

array([1, 2, 3])

上記の結果からもわかるように、2次元配列は[]をネストした構造になっていることから、インデックスを1つ指定した場合は行が取得されます。
特定の要素を取得したい場合、以下のようにインデックスを2つ使って、行と列を指定します。

b[1, 0]

[実行結果]

4

この場合、2行目(インデックス1)の1列目(インデックス0)の要素が取得されます。

  1列目 2列目 3列目
1行目 1 2 3
2行目 4 5 6

スライス

スライス(:)を使用することで、指定した範囲から要素を取得できます。
以下の場合、インデックスが1以降の値を取得します。

a[1:]

[実行結果]

array([2, 3])

2次元配列でスライスを使った場合の実行結果についても確認してみましょう。

b[:, 2]

[実行結果]

array([3, 6])

上記の場合、すべての行におけるインデックスが2の値を取得します。

反対に、以下のようにスライスを記述した場合は、特定の行のすべての列を取得します。

b[1, :]

[実行結果]

array([4, 5, 6])

データの再代入

ここでは、配列内の要素を改変する方法について説明します。
以下の1次元配列を使って要素の値を置き換えてみましょう。

a = np.array([1, 2, 3])

上で定義した配列の要素34に置き換えてみましょう。

a[2] = 4
a

[実行結果]

array([1, 2, 4])

要素の値が置き換わっているのが確認できます。
このように、取得した要素に対して値を代入することで、要素の値を置き換えることができます。

以下の2次元配列の値も置き換えてみましょう。

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

配列の要素67に置き換えます。

b[1, 2] = 7
b

[実行結果]

array([[1, 2, 3],
    [4, 5, 7]])

配列の要素67に置き換わっているのが確認できます。

次に、スライスを使って2次元配列bのすべての行の3列目の値を8に置き換えてみましょう。

b[:, 2] = 8
b

[実行結果]

array([[1, 2, 8],
    [4, 5, 8]])

すべての行の3列目の値が8に置き換わっているのが確認できます。

まとめ

  • NumPyを使用することで、配列や行列の高速に計算することができる。
  • NumPyで配列を扱う場合は、ndarrayという型で定義する必要がある。
  • Python標準のリスト同様、インデックスやスライスを使って要素を取得できる。

公式ドキュメント・参考情報

1. NumPy
2. ndarray
3. matrix
4. array
5. shape
6. ndim

ダイビックのことをもっと知ってみませんか?