Pythonで数学グラフを描くプログラム、数値計算用ライブラリnumpy(np)

今日、二子玉川の紀伊国屋書店で見た本(Pythonで動かして学ぶ!あたらしい数学の教科書 機械学習・深層学習に必要な基礎知識 第2版)の内容を思い出してプログラムを作ってみた。本は3,000円とちょっと高価だったので、次の機会に買うことにして今回は立ち読みしてきた。
なおサンプルプログラムは以下のサイトからダウンロードした。https://www.shoeisha.co.jp/book/download/9784798185668

Contents

数学のグラフを描くプログラム

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
a = 1.5 # a: 定数
x = np.linspace(-1,1) # x: 変数 -1から1の範囲
y = a * x # y: 変数
plt.plot(x, y)
plt.xlabel("x", size=14)
plt.ylabel("y", size=14)
plt.grid() plt.show()

import numpy as np とは?

import numpy as np

一言で言うと:

NumPy という外部ライブラリを読み込み、
以後 np という名前で使えるようにする

という意味です。


分解して説明します

import

import ○○

👉 他人(または別ファイル)が作った機能を使う宣言

Python本体には

  • sin

  • linspace

  • 行列計算

入っていません

なので、必要な道具を「持ってくる」のが import です。


numpy

👉 数値計算用のライブラリ(道具箱)

できること:

  • 配列(ベクトル・行列)

  • 高速な計算

  • 三角関数(sin, cos)

  • グラフ用データ作成


as np

👉 別名を付ける

numpy → np

これで

np.sin(x)
np.linspace(0, 1)

と短く書けます。

runしても動かないのですが?

 

コード自体はほぼ正しいのですが、「そのまま run しても動かない」原因は 実行環境の違いです。

動かない原因(結論)

%matplotlib inline

これは Jupyter Notebook 専用の命令です。

  • ❌ VS Code の「Run」

  • ❌ コマンドプロンプト / PowerShell

  • .py ファイルとして実行

では エラーになる or 無視されます


環境別の正しい使い方

① VS Code / コマンドプロンプトで実行する場合

👉 1行目を削除するだけでOKです。

import numpy as np
import matplotlib.pyplot as plta = 1.5
x = np.linspace(-1, 1)
y = a * x

plt.plot(x, y)
plt.xlabel("x", size=14)
plt.ylabel("y", size=14)
plt.grid()
plt.show()

plt.show() があるので、別ウィンドウでグラフが表示されます。


② Jupyter Notebook(.ipynb)で実行する場合

この場合は 元のままでOK です。

%matplotlib inline
  • グラフが セルの下に埋め込み表示されます


よくある勘違いポイント

「plt.show() があるのに表示されない」

👉 ほぼ100% %matplotlib inline を .py で使っているのが原因です。


ついでにワンポイント改善 💡

点の数を指定すると、よりきれいになります。

x = np.linspace(-1, 1, 100)

まとめ

実行環境 %matplotlib inline
Jupyter Notebook ⭕ 必要
VS Code / .py ❌ 削除する

もし

  • VS Code で Jupyter を使っている

  • エラー表示が出ている

などあれば、その画面そのまま教えてください。
一緒に原因をピンポイントで潰しましょう 😊

1行目を削除しても動きません。ファイルを.pyにしているからですか?

結論から言うと 👍
「.py にしているから動かない」わけではありません。
.py正しく実行できれば必ず動きます

なので、原因は 別のところにあります。かなり典型的なので、順に切り分けましょう。


まず確認したい一番多い原因(9割これ)

❌「Run」だけ押している

VS Code で

  • ▶(右上の Run)

  • 右クリック → Run Python File

を押しても、グラフ用のウィンドウが一瞬で閉じる/出ないことがあります。


正解の実行方法(確実に表示される)

方法①:コマンドプロンプトから実行(最も確実)

  1. VS Code でこのファイルを保存
    例:graph.py

  2. コマンドプロンプトでそのフォルダへ移動

cd フォルダのパス
  1. 実行

python graph.py

👉 これでグラフウィンドウが出なければ異常です。


それでも出ない場合のチェック項目

① matplotlib が入っていない

python -c "import matplotlib"


エラーが出たら👇

pip install matplotlib

② Python が複数入っている(超ありがち)

VS Code が使っている Python と
コマンドプロンプトの Python が 別物なケース。

VS Code で確認

  • 左下の Python 3.x.x をクリック

  • matplotlib を入れた Python を選択


③ 実は動いているが「すぐ閉じている」

.py 実行ではウィンドウがすぐ閉じることがあります。

対策(最後に1行追加)

plt.show()
input("Enterキーで終了")

最低限の「動作確認用」完全版コード

これを コピペで新規 .py にしてください👇

import numpy as np
import matplotlib.pyplot as pltx = np.linspace(-1, 1, 100)
y = 1.5 * xplt.plot(x, y)
plt.grid()
plt.show()

input("Enterキーで終了")

ここまでやっても動かない場合

次の どれか1つを教えてください(絞り込みます)👇

1️⃣ エラーメッセージ全文
2️⃣ VS Code で実行している方法(Run / Code Runner / ターミナル)
3️⃣ python --version の結果

ここまで来れば、原因は 100%特定できます
一緒に潰しましょう 💪

コマンドプロンプトから実行でOKでした。
この行の意味は?x = np.linspace(-1,1) # x: 変数 -1から1の範囲

よかった!コマンドプロンプト実行でOK 👍
では、その行を噛み砕いて説明しますね。


この行の意味

x = np.linspace(-1, 1)

一言で言うと

👉 「−1 から 1 までを、等間隔に区切った数値の並び」を作っている
という意味です。


もう少し丁寧に分解

np.linspace

linspace
linear space(等間隔) の略です。

np.linspace(開始値, 終了値)

-1, 1

  • 開始値:-1

  • 終了値:1

つまり
👉 −1 〜 1 の範囲


③ 点の数(省略されている)

実はこれ、3つ目の引数があります。

np.linspace(-1, 1, 50)

意味:
👉 −1 から 1 を 50 個の点に分割

でも今回は省略しているので…

np.linspace(-1, 1)

👉 デフォルトで 50 個 作られます。


実際の中身を見てみると

x = np.linspace(-1, 1)
print(x)

結果(イメージ):

[-1. -0.96 -0.92 ... 0.92 0.96 1. ]

👉 リストではなく NumPy の配列です。


なぜグラフに使うの?

y = 1.5 * x

この1行で

  • x の各値に対して

  • y = 1.5x を一気に計算

できるからです。

つまり:

  • x:たくさんの点

  • y:それに対応する値

  • plt.plot(x, y):線で結ぶ

📈 きれいな直線が描ける


よくある比較(超重要)

range との違い

range(-1, 1)

❌ → -1, 0 だけ(整数・終点含まない)

np.linspace(-1, 1)

⭕ → 小数を含む・終点を含む・等間隔


まとめ

x = np.linspace(-1, 1)

✔ −1〜1 の範囲
✔ 等間隔
✔ 小数あり
✔ グラフ用の「点」を作る定番

次に進むなら

  • np.arange との違い

  • 点の数を変えるとどうなるか

ここ、グラフ理解の核心なので、続けても面白いですよ 😊

size=14とは何の単位ですか?

いいところに目が行きました 👀
これは表示の見た目だけを調整する指定です。


size=14 の意味

plt.xlabel("x", size=14)
plt.ylabel("y", size=14)

👉 文字の大きさ(フォントサイズ)を 14 にする
という意味です。


もう少し具体的に

  • 単位は ポイント(pt)

  • Word や Excel のフォントサイズと同じ感覚

size 見た目
10 小さい
12 標準
14 やや大きめ
18 見出し向け

省略するとどうなる?

plt.xlabel("x")

👉 matplotlib の **デフォルトサイズ(小さめ)**になります。
グラフによっては読みにくいです。


よく使う応用例

タイトルにも使える

plt.title("y = 1.5x", size=16)

数値目盛り(ticks)の文字サイズ

plt.xticks(size=12)
plt.yticks(size=12)

まとめて指定したい場合(少し上級)

plt.rcParams["font.size"] = 14

👉 全体の文字サイズを一括変更


まとめ

  • size=14 = 文字を読みやすくするための指定

  • 計算結果には 一切影響なし

  • グラフを「人に見せる」ときに超重要

次に気になるとしたら
👉 plt.grid()
👉 plt.plot(x, y) の中身

どっち行きます?

二乗の演算子は?

いい質問です。Python では 二乗は専用の演算子があります 👍


二乗の演算子

x ** 2

👉 **べき乗(power)演算子
👉 2 を指定すると 二乗


x = 3
print(x ** 2) # 9

NumPy 配列でも同じ

import numpy as np

x = np.linspace(-1, 1, 5)
y = x ** 2
print(y)

結果:

[1. 0.25 0. 0.25 1. ]

👉 for ループ不要で、全部一気に二乗されます。


グラフにすると

y = x ** 2
plt.plot(x, y)
plt.grid()
plt.show()

📈 放物線(U字カーブ)になります。


よくある間違い ❌

x ^ 2

これは 二乗ではありません(ビット演算 XOR)
初心者が一番ハマる罠です。


まとめ

書き方 意味
x ** 2 二乗
x ** 3 三乗
x ** 0.5 平方根

次は

  • x**2 + 2*x + 1 を描く

  • 一次関数と二次関数を同時に描く

どっちいきます?

sinの演算子は?

これも超大事なところです 👍
**sin は「演算子」ではなく「関数」**として使います。


sin の書き方(基本)

import numpy as np

y = np.sin(x)

👉 np.sin()サイン(正弦)関数


重要ポイント①:角度は「ラジアン」

Python / NumPy の sin度数法ではなくラジアンです。

角度 ラジアン
0
90° π/2
180° π
360°
np.sin(np.pi / 2) # → 1.0

グラフの定番例(サインカーブ)

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 200)
y = np.sin(x)plt.plot(x, y)
plt.grid()
plt.show()

📈 きれいな sin 波が出ます。


度数法を使いたい場合

x_deg = np.linspace(0, 360, 360)
x_rad = np.deg2rad(x_deg) # 度 → ラジアン
y = np.sin(x_rad)

よく使う三角関数セット

np.sin(x) # sin
np.cos(x) # cos
np.tan(x) # tan

よくある間違い ❌

sin(x) # ❌ 定義されていない
math.sin(x) # ⭕ ただし配列には不向き

※ グラフでは 必ず np.sin が正解です。


まとめ

  • sin は ** のような演算子ではない

  • np.sin(x) が正解

  • 入力は ラジアン

  • NumPy 配列にそのまま使える

次に行くなら
👉 cossin を同時に描く
👉 振幅(2*sin(x))や位相(sin(x+π/4))

どれいきます?

np.とは何ですか?

いいところ来ましたね。ここ分かると NumPy が一気に楽になります 👍


np. とは?

import numpy as np

この1行で、

numpy という長い名前を、np という短い別名で使います

という宣言をしています。


つまり…

  • numpy → 本名

  • np → ニックネーム(別名・エイリアス)

np.sin(x)

は本当は

numpy.sin(x)

と同じ意味です。


なぜ np を使うの?

理由①:短くて読みやすい

numpy.linspace(0, 10)
np.linspace(0, 10)

👉 圧倒的に np の方が楽


理由②:世界共通の慣習

  • 教科書

  • ネット記事

  • 公式ドキュメント

👉 ほぼ100% import numpy as np

別の名前にすると、逆に混乱します。


np. の後ろにあるものは?

👉 NumPy が用意した道具箱

例:

np.linspace() # 等間隔の配列
np.array() # 配列を作る
np.sin() # サイン関数
np.pi # 円周率 π

np を使わないとどうなる?

import numpy

x = numpy.linspace(0, 1)
y = numpy.sin(x)

動きます。
でも 誰もこう書きません 😅


ちょっと大事な補足

import numpy as np

この1行がないと…

np.sin(x)

NameError: name 'np' is not defined

になります。


まとめ

  • npNumPy の略称(別名)

  • import numpy as np で定義

  • NumPyの関数・定数は np. から始まる

  • 数値計算・グラフでは必須級

次に理解すると一気に視界が開けるのは
👉 NumPy配列と普通のリストの違い
ここ、超重要ですが行きます?

グラフ作成のまとめ

直線のグラフを描く

プログラム

import numpy as np
import matplotlib.pyplot as plt

a = 1  # a: 定数
x = np.linspace(1,10,10)  # x: 変数 1から10の範囲を10個の点に分割
y = a * x * 2  # y: 変数

print(x)
print(y)

plt.plot(x, y)
plt.xlabel("yoko x", size=14)
plt.ylabel("tate y", size=14)
plt.grid()
plt.show()

結果

PS C:\Users\DELL\tamu> & C:/Users/DELL/AppData/Local/Programs/Python/Python313/python.exe c:/Users/DELL/tamu/tamu-test-suugaku.py
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[ 2. 4. 6. 8. 10. 12. 14. 16. 18. 20.]

グラフ

二乗のグラフを描く

プログラム

import numpy as np
import matplotlib.pyplot as plt

a = 1  # a: 定数
x = np.linspace(1,10,50)  # x: 変数 1から10の範囲を50個の点に分割
y = a * x ** 2  # y: 変数

print(x)
print(y)

plt.plot(x, y)
plt.xlabel("yoko x", size=14)
plt.ylabel("tate y", size=14)
plt.grid()
plt.show()

結果

[ 1. 1.18367347 1.36734694 1.55102041 1.73469388 1.91836735
2.10204082 2.28571429 2.46938776 2.65306122 2.83673469 3.02040816
3.20408163 3.3877551 3.57142857 3.75510204 3.93877551 4.12244898
4.30612245 4.48979592 4.67346939 4.85714286 5.04081633 5.2244898
5.40816327 5.59183673 5.7755102 5.95918367 6.14285714 6.32653061
6.51020408 6.69387755 6.87755102 7.06122449 7.24489796 7.42857143
7.6122449 7.79591837 7.97959184 8.16326531 8.34693878 8.53061224
8.71428571 8.89795918 9.08163265 9.26530612 9.44897959 9.63265306
9.81632653 10. ]
[ 1. 1.40108288 1.86963765 2.40566431 3.00916285
3.68013328 4.41857559 5.2244898 6.09787589 7.03873386
8.04706372 9.12286547 10.26613911 11.47688463 12.75510204
14.10079134 15.51395252 16.99458559 18.54269055 20.15826739
21.84131612 23.59183673 25.40982924 27.29529363 29.2482299
31.26863807 33.35651812 35.51187005 37.73469388 40.02498959
42.38275718 44.80799667 47.30070804 49.8608913 52.48854644
55.18367347 57.94627239 60.77634319 63.67388588 66.63890046
69.67138692 72.77134527 75.93877551 79.17367763 82.47605165
85.84589754 89.28321533 92.788005 96.36026656 100. ]

グラフ

sinカーブを描く

プログラム

import numpy as np
import matplotlib.pyplot as plt

a = 1  # a: 定数
x = np.linspace(1,10,50)  # x: 変数 1から10の範囲を50個の点に分割
y = np.sin(x)  # y: 変数

print(x)
print(y)

plt.plot(x, y)
plt.xlabel("yoko x", size=14)
plt.ylabel("tate y", size=14)
plt.grid()
plt.show()

結果

[ 1. 1.18367347 1.36734694 1.55102041 1.73469388 1.91836735
2.10204082 2.28571429 2.46938776 2.65306122 2.83673469 3.02040816
3.20408163 3.3877551 3.57142857 3.75510204 3.93877551 4.12244898
4.30612245 4.48979592 4.67346939 4.85714286 5.04081633 5.2244898
5.40816327 5.59183673 5.7755102 5.95918367 6.14285714 6.32653061
6.51020408 6.69387755 6.87755102 7.06122449 7.24489796 7.42857143
7.6122449 7.79591837 7.97959184 8.16326531 8.34693878 8.53061224
8.71428571 8.89795918 9.08163265 9.26530612 9.44897959 9.63265306
9.81632653 10. ]
[ 0.84147098 0.92599909 0.97937546 0.99980446 0.98659884 0.94020283
0.86217727 0.75514703 0.62271272 0.46932961 0.30015769 0.1208881
-0.06244832 -0.2436839 -0.41672165 -0.57574039 -0.71539052 -0.83097406
-0.91860262 -0.97532829 -0.99924273 -0.98954144 -0.94655078 -0.87171701
-0.76755763 -0.63757668 -0.48614689 -0.31836252 -0.13986806 0.04333173
0.2250738 0.3992441 0.55998336 0.7018841 0.82017261 0.91086952
0.97092368 0.9983148 0.99212141 0.95255185 0.8809373 0.77968695
0.65220699 0.50278601 0.33645069 0.15879677 -0.02419927 -0.20638121
-0.38162024 -0.54402111]
Traceback (most recent call last):

グラフ

 

コメント