リンドくんたなべ先生、データサイエンスを勉強するには「NumPy」が必要って聞いたんですけど、これって何ですか?
たなべNumPyはPythonで数値計算を高速に行うためのライブラリなんだ。
大量のデータを扱うとき、普通のPythonリストより圧倒的に速いんだよ。
データサイエンスやAI開発を学ぶ上で、NumPy(ナムパイ)は避けて通れないライブラリです。
機械学習の有名なライブラリであるPandasやscikit-learn、TensorFlowなども、すべてNumPyを基盤として作られています。
しかし、初めて触れる方にとって「なぜ必要なのか」「どう使うのか」は分かりにくいかもしれません。
この記事では、プログラミング初心者の方でも理解できるよう、NumPyの基礎をシンプルに解説します。
実際のコード例を見ながら、配列の作成から基本操作、高速計算の仕組みまで学んでいきましょう。
NumPyとは?普通のリストとの違い
リンドくんNumPyって、普通のPythonリストと何が違うんですか?
たなべ一番の違いは速さなんだ。
100万個のデータを処理する場合、NumPyは普通のリストより10倍以上速いこともあるよ!
NumPyの特徴
NumPyは「Numerical Python」の略で、数値計算を効率的に行うためのライブラリです。
普通のPythonリストとの主な違いは以下の通りです。
- 処理速度が速い → 大量のデータを素早く計算できる
- メモリ効率が良い → 同じデータ型だけを格納するため無駄がない
- 簡潔に書ける → ループを書かずに配列全体を一度に処理できる
- 豊富な数学関数 → 平均、標準偏差、三角関数などが最初から用意されている
なぜデータサイエンスで使われるのか
データサイエンスでは、数十万、数百万といった大量のデータを扱います。例えば、1枚の画像データだけでも数百万のピクセル情報があります。
このような大量データを普通のPythonリストで処理すると、以下の問題が起きます。
- 処理に時間がかかりすぎる
- メモリをたくさん使ってしまう
- コードが長く複雑になる
NumPyを使えば、これらの問題を解決できるのです。実際、データサイエンス分野のほぼすべてのライブラリがNumPyを基盤にしているほど重要なツールです。
NumPyのインストールと配列の作り方
リンドくんNumPyを使うには、まず何をすればいいですか?
たなべインストールはたった1行でできるよ!とても簡単だから安心してね。
インストール方法
pip install numpyインストール後、Pythonコードで以下のようにインポートします。
import numpy as np世界中の開発者がnpという短い名前でインポートしているので、この書き方を覚えておきましょう。
配列を作ってみよう
リストから配列を作る
import numpy as np
# 1次元配列
array_1d = np.array([1, 2, 3, 4, 5])
print(array_1d)
# 出力: [1 2 3 4 5]
# 2次元配列
array_2d = np.array([[1, 2, 3],
[4, 5, 6]])
print(array_2d)
# 出力:
# [[1 2 3]
# [4 5 6]]便利な配列の作り方
# すべて0の配列
zeros = np.zeros((3, 4)) # 3行4列
print(zeros)
# すべて1の配列
ones = np.ones((2, 3)) # 2行3列
print(ones)
# 連続した数値
numbers = np.arange(0, 10, 2) # 0から10まで2刻み
print(numbers)
# 出力: [0 2 4 6 8]
# ランダムな数値
random = np.random.rand(3, 3) # 3×3のランダム配列
print(random)これらの関数を使えば、様々なパターンの配列を簡単に作れます。機械学習では初期化やテストデータ作成でよく使います。
配列の基本操作
リンドくん配列を作ったら、次は何ができるんですか?
たなべ配列の情報を確認したり、形を変えたり、特定の要素を取り出したりできるよ。これらは実際の開発でとてもよく使うんだ。
配列の情報を見てみよう
import numpy as np
array = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# 形を確認
print(f"形: {array.shape}") # (3, 4) → 3行4列
# 要素の個数
print(f"要素数: {array.size}") # 12個
# データ型
print(f"データ型: {array.dtype}") # int64配列の形を変える
# 1次元配列を作成
original = np.arange(12)
print(original)
# 出力: [ 0 1 2 3 4 5 6 7 8 9 10 11]
# 3行4列に変形
reshaped = original.reshape(3, 4)
print(reshaped)
# 出力:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]配列から要素を取り出す
array = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# 特定の要素
print(array[0, 0]) # 1行1列目 → 1
print(array[1, 2]) # 2行3列目 → 7
# 行全体
print(array[0]) # 1行目 → [1 2 3 4]
# 列全体
print(array[:, 1]) # 2列目 → [ 2 6 10]Pythonのリストと似ていますが、2次元配列でも直感的にアクセスできるのがNumPyの便利なところです。
NumPyの高速計算
リンドくんNumPyが速いって聞きましたけど、実際どう使うんですか?
たなべNumPyの最大の特徴は、ループを書かずに配列全体を一度に処理できることなんだ。これを見てみよう!
配列全体への計算
import numpy as np
array = np.array([1, 2, 3, 4, 5])
# すべての要素を2倍に
doubled = array * 2
print(doubled)
# 出力: [ 2 4 6 8 10]
# すべての要素に10を足す
added = array + 10
print(added)
# 出力: [11 12 13 14 15]
# すべての要素を2乗
squared = array ** 2
print(squared)
# 出力: [ 1 4 9 16 25]普通のPythonリストなら、ループやリスト内包表記を書く必要があります。NumPyならこんなにシンプルです!
配列同士の計算
array1 = np.array([1, 2, 3, 4])
array2 = np.array([10, 20, 30, 40])
# 足し算
print(array1 + array2)
# 出力: [11 22 33 44]
# 掛け算(要素ごと)
print(array1 * array2)
# 出力: [ 10 40 90 160]便利な数学関数
array = np.array([1, 4, 9, 16, 25])
# 平方根
print(np.sqrt(array))
# 出力: [1. 2. 3. 4. 5.]
# 平均値
print(np.mean(array))
# 出力: 11.0
# 合計
print(np.sum(array))
# 出力: 55
# 最大値・最小値
print(np.max(array)) # 25
print(np.min(array)) # 1これらの関数は、データ分析や機械学習で頻繁に使います。
データの統計処理
リンドくんテストの点数とか、データを分析するときにはどう使えばいいですか?
たなべいい質問だね!実際の成績データを例に見てみよう。
成績データの分析例
import numpy as np
# 学生5人、科目3つの成績データ
scores = np.array([
[85, 90, 78], # 学生1
[92, 88, 95], # 学生2
[76, 85, 80], # 学生3
[88, 92, 87], # 学生4
[95, 89, 93] # 学生5
])
# 各学生の平均点(行方向に計算)
student_avg = np.mean(scores, axis=1)
print("各学生の平均点:", student_avg)
# 出力: [84.33 91.67 80.33 89. 92.33]
# 各科目の平均点(列方向に計算)
subject_avg = np.mean(scores, axis=0)
print("各科目の平均点:", subject_avg)
# 出力: [87.2 88.8 86.6]
# 全体の平均点
total_avg = np.mean(scores)
print("全体の平均:", total_avg)
# 出力: 87.53
# 最高点と最低点
print("最高点:", np.max(scores)) # 95
print("最低点:", np.min(scores)) # 76条件を使ったデータ処理
# 80点以上の科目数を数える
high_scores = scores >= 80
count = np.sum(high_scores, axis=1)
print("80点以上の科目数:", count)
# 出力: [2 3 2 3 3]
# 90点以上の点数だけ抽出
excellent = scores[scores >= 90]
print("90点以上:", excellent)
# 出力: [90 92 95 92 95 93]このように、NumPyを使えばデータ分析が簡単にできます。
実際の速度を比べてみよう
リンドくんNumPyって本当に速いんですか?実際に見てみたいです!
たなべそれじゃあ比較してみよう。同じ処理をNumPyとPythonリストでやった場合の違いを見てもらうよ。
速度比較
import numpy as np
import time
# 100万個のデータを準備
size = 1000000
python_list = list(range(size))
numpy_array = np.arange(size)
# Pythonリストで処理(リスト内包表記)
start = time.time()
result_list = [x * 2 for x in python_list]
time_list = time.time() - start
print(f"Pythonリスト: {time_list:.4f}秒")
# NumPyで処理
start = time.time()
result_numpy = numpy_array * 2
time_numpy = time.time() - start
print(f"NumPy: {time_numpy:.4f}秒")
# 何倍速いか
print(f"NumPyは約{time_list / time_numpy:.1f}倍速い!")
# 実行結果の例
# Pythonリスト: 0.0856秒
# NumPy: 0.0034秒
# NumPyは約25.2倍速い!データ量が多いほど、NumPyの速さが際立ちます。これがデータサイエンスでNumPyが必須とされる理由です。
まとめ
リンドくんNumPyって思ったよりシンプルですね!すぐに使えそうです。
たなべその通り!基本をマスターすれば、データサイエンスやAI開発の土台がしっかりできるよ。ぜひ実際に手を動かして試してみてね。
NumPyの重要ポイントとまとめておきましょう。
- 高速な数値計算 → 普通のPythonリストより10倍以上速い
- シンプルな書き方 → ループを書かずに配列全体を処理できる
- 豊富な関数 → 平均、合計、統計処理などが簡単にできる
- データサイエンスの基盤 → Pandas、scikit-learn、TensorFlowなどの土台
NumPyは、データサイエンスやAI開発を学ぶ上で最初に身につけるべき重要なスキルです。
最初は難しく感じるかもしれませんが、基本的な使い方はとてもシンプルです。
実際に手を動かして、コードを書いてみることが上達への近道です。
今回紹介したコード例を試しながら、NumPyの便利さを体感してみてください。





