Takuya Kawanishi

2. Jupyter Notebook で Python を動かす

2.1 準備

インストールは各自で

Jupyter Notebook 用 フォルダーの準備

  1. ドキュメントホルダー内に新しいフォルダーを作る

  2. そのフォルダーにこのファイルを保存.

  3. そのフォルダーに移動

  4. フォルダー内でコマンドプロンプトを起動

  5. コマンドプロンプトで ‘jupyter notebook’ と入力

  6. Home Page 内でこのファイルをクリックして開く.

  7. ファイルを別名で保存.

2.2 Jupyter Notebook の使い方

ファイルの取扱

  • Jupyter notebook は, ファイルの取扱に若干のクセがある.

    • 自動保存

    • remame

    • save as

    • make a copy

    • これは慣れるしかない.

基本的な使い方.

  • コマンドモードとエディットモード

    • Esc でコマンドモードへ

    • Enter でエディットモードへ

  • セルの実行: コマンドモードでもエディットモードでも有効

    • Ctrl+Enter, そのセルを実行

    • Shift+Enter, そのセルを実行して下のセルに移る.

    • Alt+Enter, そのセルを実行してその下に新たなセルを作る.

  • セルの削除

    • コマンドモードで ‘dd’ つまり ’d’を 2 回打つ.

Numpy を電卓のように使う.

[1]:
import numpy as np


np.log(10)
[1]:
2.302585092994046
[2]:
# 上のセルを実行したあとは, import numpy as np は必要ない.

np.log10(10)
[2]:
1.0
  • np.log: 自然対数

  • np.log10: 常用対数

  • 表示 print

[3]:
print(np.log(10))
2.302585092994046
  • 定数

[4]:
print(np.pi)
print(np.e)
print(np.euler_gamma)
print(np.nan)
a = np.pi
3.141592653589793
2.718281828459045
0.5772156649015329
nan
  • 定数は同じセッション内では記憶されている.

[5]:
print(a)

3.141592653589793

3.3 計算例

Examples 1

次を計算せよ.

    1. \(5\pi\)

    1. \(\sin \frac{1}{2} \pi\)

    1. \(\sinh \frac{1}{2}\)

    1. \(\arcsin (\frac{1}{2}) / \pi\)

Example 1, solutions

[6]:
print(5 * np.pi)
print(np.sin(.5 * np.pi))
print(np.sinh(.5))
print(np.arcsin(.5) / np.pi)
15.707963267948966
1.0
0.5210953054937474
0.16666666666666669

for 文の復習

[8]:
lst = ['a', 'b', 2 , 'd']
for l in lst:
    print(l)
a
b
2
d
[9]:
lst = [1, 2, 3, 4]
for l in lst:
    print(np.exp(l))
2.718281828459045
7.38905609893065
20.085536923187668
54.598150033144236
[10]:
for i in range(4):  # 0 から 3 まで
    print(i, np.exp(i))
0 1.0
1 2.718281828459045
2 7.38905609893065
3 20.085536923187668
[14]:
v = np.array([1, 2, 3, 4])
for t in v:
    print(t, np.exp(t))
print(type(v))
print(type(lst))
1 2.718281828459045
2 7.38905609893065
3 20.085536923187668
4 54.598150033144236
<class 'numpy.ndarray'>
<class 'list'>

行列, ベクトル

  • \(\texttt{numpy.array}\) を使う

[11]:
a = np.array([[1, 2], [3, 4]])
print(a)
[[1 2]
 [3 4]]
  • 行列の掛け算は, \(\texttt{np.matmul}\) を使う, 単なる \(*\) は項別の積をとったもの.

[12]:
b = np.array([[2, 3], [5, 6]])
print(b)
print(np.matmul(a, b))
print(a * b)
[[2 3]
 [5 6]]
[[12 15]
 [26 33]]
[[ 2  6]
 [15 24]]
  • 行列に関する計算例

[13]:
ainv = np.linalg.inv(a)     # a の逆行列
print(ainv)
print(np.matmul(a, ainv))   # a と逆行列の積
print(np.linalg.det(a))     # 行列式
[[-2.   1. ]
 [ 1.5 -0.5]]
[[1.00000000e+00 1.11022302e-16]
 [0.00000000e+00 1.00000000e+00]]
-2.0000000000000004

リストと Numpy 配列との違い

[14]:
ls = [.1, .2, .3, .4, .5]
sinlpis = []
for l in ls:
    sinlpis.append(np.sin(l * np.pi ))
print(sinlpis)


rs = np.array(ls)
sinrpis = np.sin(rs * np.pi)
print(sinrpis)
[0.3090169943749474, 0.5877852522924731, 0.8090169943749475, 0.9510565162951535, 1.0]
[0.30901699 0.58778525 0.80901699 0.95105652 1.        ]
[15]:
# 最初から Numpy 配列として作成する.

ps = np.array([.1, .2, .3, .4, .5])
sinppis = np.sin(ps * np.pi)
print(sinppis)
[0.30901699 0.58778525 0.80901699 0.95105652 1.        ]

リストと Numpy 配列との違い 2

[16]:
lst2 = [[1, 2], [3, 4]]
#print(lst2)
#print(type(lst2))

a = np.array([[1, 2], [3, 4]])
#print(a)
#print(type(a))
#print(np.matmul(a, a))

固有値

[1]:
import numpy as np


aa = np.array([[1, 1], [-1, 1]])
print(np.linalg.eig(aa))

#print('見やすくしよう.')
print(np.linalg.eig(aa)[0])  # [0] で固有値のベクトルが
print(np.linalg.eig(aa)[1])  # [0] で列固有ベクトルを並べた行列が表示される.
print('固有ベクトルはこの行列の各列である. 行ではない.')

(array([1.+1.j, 1.-1.j]), array([[0.70710678+0.j        , 0.70710678-0.j        ],
       [0.        +0.70710678j, 0.        -0.70710678j]]))
[1.+1.j 1.-1.j]
[[0.70710678+0.j         0.70710678-0.j        ]
 [0.        +0.70710678j 0.        -0.70710678j]]
固有ベクトルはこの行列の各列である. 行ではない.

軌跡*

[18]:
import scipy.linalg

ts = np.linspace(0, 5, 6)
x0 = [1, 1]

#print(ts)
#print(x0)

#
# これ以下の部分, 配列としての計算もできると思うけど, 未確認.
#
taas = []
xs = []
for t in ts:
    exptaa = scipy.linalg.expm(t * aa)
    taas.append(exptaa)
    xs.append(np.matmul(exptaa, x0))

xs = np.array(xs)
#print(xs)
[19]:
import matplotlib.pyplot as plt
%matplotlib inline


#fig, ax = plt.subplots(figsize=(4, 4))
#ax.plot(xs[:, 0], xs[:, 1])

課題

課題 2.1

  • 次の行列の行列式を \(\texttt{numpy}\) を用いて求めよ.

\[\begin{split}A = \begin{bmatrix} 1 & 2 & 3 \\ 2 & 9 & 4 \\ 2 & 4 & 6 \end{bmatrix}\end{split}\]
\[\begin{split}B = \begin{bmatrix} 1 & 2 & 3 \\ 0 & 2 & 5 \\ 0 & 0 & 3 \end{bmatrix}\end{split}\]
\[C = B^\mathrm T\]
\[D = A B\]
\[E = B^2\]

課題 2.2

  • \(A\), \(B\) が次のように与えられるとき, \(\det (AB)\), \(\det(BA)\), \(\det (B^\mathrm T A^\mathrm T)\)\(\texttt{numpy}\) を用いて求めよ.

    \[\begin{split}A = \begin{bmatrix} 1 & 2 & 3 \\ 2 & 3 & 2 \end{bmatrix} , \quad B = \begin{bmatrix} 1 & 2 \\ 1 & 4 \\ 1 & 2 \end{bmatrix}\end{split}\]

課題 2.3

  • リストあるいは, \(\texttt{numpy.(nd)array}\) を用いて, 自然対数 \(\log x_i\), \(x_i =i\), \(i = 1, 2, 3, 4\) を計算せよ