テクノロジー
2024年11月15日NumPyとは
NumPyとは、Pythonのサードパーティ製のパッケージであり、配列や行列を効率よく扱うことができます。
NumPyには配列を扱うためのndarrayと、行列を扱うためのmatrixという型があり、これらの型で要素を扱う場合はint
やfloat
など、特定のデータ型に揃える必要があります。
また、NumPyには関数やメソッドや用意されており、これらを利用することで高速に配列や行列の計算を行うことができます。
本テキストでは、データ分析で主に使用されるndarrayについて解説します。
目次
著者プロフィール
ゴール
NumPyとは
NumPyのインポート
NumPyを使って配列を作成する
1次元配列
2次元配列
配列から要素を取得する
インデックス
スライス
データの再代入
まとめ
公式ドキュメント・参考情報
著者プロフィール
IT分野における教育の先駆者として、多くのエンジニアを育成するプログラミングスクールの運営、Web開発やAI研修を行なっています。幅広いレベルの受講生に対して実践的なスキルを提供。生徒の成長を第一に考え、効果的で魅力的な教育プログラムの設計に情熱を注いでいます。
ゴール
- NumPyの特徴と基本的な使い方を理解する
NumPyとは
NumPyとは、Pythonのサードパーティ製のパッケージであり、配列や行列を効率よく扱うことができます。
NumPyには配列を扱うためのndarrayと、行列を扱うためのmatrixという型があり、これらの型で要素を扱う場合はint
やfloat
など、特定のデータ型に揃える必要があります。
また、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])
上で定義した配列の要素3
を4
に置き換えてみましょう。
a[2] = 4
a
[実行結果]
array([1, 2, 4])
要素の値が置き換わっているのが確認できます。
このように、取得した要素に対して値を代入することで、要素の値を置き換えることができます。
以下の2次元配列の値も置き換えてみましょう。
b = np.array([[1, 2, 3], [4, 5, 6]])
配列の要素6
を7
に置き換えます。
b[1, 2] = 7
b
[実行結果]
array([[1, 2, 3],
[4, 5, 7]])
配列の要素6
が7
に置き換わっているのが確認できます。
次に、スライスを使って2次元配列b
のすべての行の3列目の値を8
に置き換えてみましょう。
b[:, 2] = 8
b
[実行結果]
array([[1, 2, 8],
[4, 5, 8]])
すべての行の3列目の値が8
に置き換わっているのが確認できます。
まとめ
- NumPyを使用することで、配列や行列の高速に計算することができる。
- NumPyで配列を扱う場合は、ndarrayという型で定義する必要がある。
- Python標準のリスト同様、インデックスやスライスを使って要素を取得できる。