NumPyのインストール 〜 arrayの基本
はじめに
本記事は「Pythonで数値計算を行うためのNumPy入門」シリーズの第1回です.
このシリーズでは, "NumPyのよく使われる機能を分野ごとに理解すること" を目標としています.
Pythonで数値計算を行う際に欠かせないライブラリ「NumPy」について,基礎から応用まで体系的に学べます.
シリーズ構成予定(全10記事)
- NumPyのインストール 〜 arrayの基本(本記事)
- 配列の追加・挿入・コピー(公開後にリンクを追加する予定)
- 配列の作成(ones / zeros / arange / linspace)(公開後にリンクを追加する予定)
- 配列の結合(hstack / vstack)(公開後にリンクを追加する予定)
- 条件抽出と検索(where / clip / unique)(公開後にリンクを追加する予定)
- 統計処理(mean / std / median ほか)(公開後にリンクを追加する予定)
- 線形代数(dot / inv / det / norm)(公開後にリンクを追加する予定)
- 乱数生成(rand / randint / normal)(公開後にリンクを追加する予定)
- 三角関数と角度変換(sin / arctan2 ほか)(公開後にリンクを追加する予定)
- ファイル入出力(savetxt / loadtxt)(公開後にリンクを追加する予定)
私のNumpyライブラリのバージョンは "1.26.4" です.
本記事のゴール
本記事では,以下内容を目標とします.
- NumPyとは何か
- インストール方法(pip / conda)
-
np.array()の使い方 -
shapeとsizeの確認方法 - Pythonのリストとの違い
Numpyとは?
"NumPy (Numerical Python)" は,Pythonで数値計算を高速かつ効率的に行うためのライブラリです.
Numpyの特徴を以下にまとめます.
| 機能 | 説明 |
|---|---|
| 高速計算 | C言語実装により高速 |
| ベクトル・行列演算が簡単 |
np.dotやnp.linalg.inv などを使用 |
| 科学技術計算でも使用 | シミュレーション,物理,ロボット工学にも活用 |
NumPyの中心となるのが, "ndarray`(多次元配列)" です.Python標準のリストよりも高速に計算が行えます.
NumPyのインストール方法
NumPyを使用するには.事前にインストールが必要です.
pip を使う場合(公式Pythonインストール)
pip install numpy
conda を使う場合(Anaconda環境)
conda install numpy
上記の2通りで,Pythonをインストールすることができます.
Pythonをインストールした時に,Python公式を経由した際は "pip" により "Numpy" をインストールし,Anaconda環境を経由した際は "conda" により "Numpy" をインストールした方が良いです.
ndarray の基本:np.array() を使ってみよう
NumPyを使うためには,まずライブラリの読み込みから始めます.
import numpy as np
numpyライブラリを "np" という名前として,扱えるようにライブラリを読み込んでいます.
以降では "np" という名前を使っていきます.
その後, np.array()を用いて配列(ndarray)を作ります.
以下は1次元配列(ベクトル)の例です.
a = np.array([1, 2, 3])
print(a)
# 出力: [1 2 3]
以下は2次元配列(行列)の例です.
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
# 出力:
# [[1 2 3]
# [4 5 6]]
shape と size の確認
NumPy配列には,以下のような属性があります.
| 属性 | 説明 | 例 |
|---|---|---|
| shape | 配列の「形(行数, 列数など)」 | (2, 3) |
| size | 全要素数 | 6 |
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b.shape) # 出力: (2, 3)
print(b.size) # 出力: 6
Pythonのリストとの違い
以下のコードを比較してみましょう.
# Pythonリストの計算
lst = [1, 2, 3]
print(lst * 2)
# 出力: [1, 2, 3, 1, 2, 3]
# NumPyの計算
arr = np.array([1, 2, 3])
print(arr * 2)
# 出力: [2 4 6]
- リストは「要素の繰り返し」
- NumPyは「数値計算として処理」
Pythonリストとの違い(NumPyが速い理由)
| 項目 | Pythonのリスト | NumPy配列 |
|---|---|---|
| データの保存方式 | 別メモリ上に保持 | メモリ上に連続で保持 |
| 計算速度 | 遅い | 非常に速い |
| ベクトル演算 | for文が必要 | arr * 2 |
NumPy配列は,データをメモリ上に連続で保持しているから,処理が早くなる.また,C言語で実装されているので,処理が高速となる.
PythonのリストとNumPy配列でのデータ保存方式が異なる理由を下表にまとめた.
| 項目 | Pythonリスト | NumPy配列 |
|---|---|---|
| 格納方式 | 間接アドレス方式(ポインタの配列) | 直接アドレス方式(連続メモリ) |
| 要素の型 | 任意混在(文字列・整数・オブジェクトなど) | 同じ型のみ |
| メモリサイズ | 要素サイズがバラバラ | 全要素同じサイズ |
| 次要素へのアクセス | +1ポインタ分進めるだけ | 要素サイズ × nバイト足す |
| メリット | 柔軟性高い | 高速・メモリ効率良い |
Pythonリストは要素の型が混在しても良いため,格納方式として "間接アドレス方式" を採用している.
NumPy配列は要素の型が同じ型のみのため,格納方式として "直接アドレス方式" を採用している.
ここで,"直接アドレス方式" と "間接アドレス方式" に関して説明します.
以下は,"直接アドレス方式" です.

以下は,"間接アドレス方式" です.

"間接アドレス方式" ではデータを取得するのに必要な処理数が2回なのに対して,"直接アドレス方式" ではデータを取得するのに必要な処理数が1回です.そのため,"直接アドレス方式" は "オーバーヘッド(付加的な処理)" が少ないから,"間接アドレス方式" と比べて処理時間が短くなります.
配列の要素数が多くなるほで,"オーバーヘッド" によって処理時間の違いが顕著になります.
終わりに
本記事では,Numpyに関する簡単な情報を説明しました.
以下にNumpyの特徴をまとめます.
- NumPyは数値計算を高速かつ効率的に行うライブラリ
- np.array() を使って多次元配列(ndarray)を作る
- shape と size で配列の情報を確認
- Pythonのリストとは動作が異なる
次回予告
第2回では,以下のような「配列の操作」に焦点を当てます.
- np.append()(追加)
- np.insert()(挿入)
- np.copy()(コピー)
配列操作の基礎が身につくと,データ加工や機械学習の前処理,ロボットなどの様々な分野に応用できます.
参考文献
本記事を作成するに当たって参考にしたサイトをまとめました.
Discussion