<jupyter_start><jupyter_text>numpy と 線形代数線形代数を学ぶには numpy と sympy の両方が必要である。 numpy でないと機械学習なのど高速な計算ができないし、sympy でないと数式処理ができない。* 行列計算* 行列方程式を解く* 逆行列と行列式を計算する  行列計算次の例を考える$$A = \begin{pmatrix}5 & 6 & 2\\4 & 7 & 19\\0 & 3 & 12\end{pmatrix}$$$$B = \begin{pmatrix}14 & -2 & 12\\4 & 4 & 5\\5 & 5 & 1\end{pmatrix}$$ numpy を使うためには import する必要がある。<jupyter_code>import numpy as np
A = np.matrix([[5, 6, 2],
               [4, 7, 19],
               [0, 3, 12]])
B = np.matrix([[14, -2, 12],
               [4, 4, 5],
               [5, 5, 1]])
print(A)
print(B)<jupyter_output>[[ 5  6  2]
 [ 4  7 19]
 [ 0  3 12]]
[[14 -2 12]
 [ 4  4  5]
 [ 5  5  1]]<jupyter_text>同じことを sympy でやってみると次のようになる。<jupyter_code># 同じことを sympy でやってみると
from sympy import *
A_sympy = Matrix([[5, 6, 2],
               [4, 7, 19],
               [0, 3, 12]])
B_sympy = Matrix([[14, -2, 12],
               [4, 4, 5],
               [5, 5, 1]])
display(A_sympy)
display(B_sympy)<jupyter_output><empty_output><jupyter_text>次の計算をする* $5A$* $A ^ 3$ * $A + B$;* $A - B$;* $AB$<jupyter_code>print(A)
print(5 * A)
print(A**2)
print(A**3)
print(A+B)
print(A-B)
print(A*B)<jupyter_output>[[ 5  6  2]
 [ 4  7 19]
 [ 0  3 12]]
[[25 30 10]
 [20 35 95]
 [ 0 15 60]]
[[ 49  78 148]
 [ 48 130 369]
 [ 12  57 201]]
[[ 557 1284 3356]
 [ 760 2305 6994]
 [ 288 1074 3519]]
[[19  4 14]
 [ 8 11 24]
 [ 5  8 13]]
[[ -9   8 -10]
 [  0   3  14]
 [ -5  -2  11]]
[[104  24  92]
 [179 115 102]
 [ 72  72  27]]<jupyter_text>いまここ ---練習問題 $\quad$  Compute $A ^ 2 - 2 A + 3$ with:$$A = \begin{pmatrix}1 & -1\\2 & 1\end{pmatrix}$$--- Solving Matrix equationsWe can use Numpy to (efficiently) solve large systems of equations of the form:$$Ax=b$$Let us illustrate that with:$$A = \begin{pmatrix}5 & 6 & 2\\4 & 7 & 19\\0 & 3 & 12\end{pmatrix}$$$$b = \begin{pmatrix}-1\\2\\1 \end{pmatrix}$$<jupyter_code>A = np.matrix([[5, 6, 2],
               [4, 7, 19],
               [0, 3, 12]])
b = np.matrix([[-1], [2], [1]])<jupyter_output><empty_output><jupyter_text>We use the `linalg.solve` command:<jupyter_code>x = np.linalg.solve(A, b)
x<jupyter_output><empty_output><jupyter_text>We can verify our result:<jupyter_code>A * x<jupyter_output><empty_output><jupyter_text>---練習問題 $\quad$  行列方程式 $Bx=b$ を解く。 --- 逆行列と行列式を求める逆行列は次のようにして求められる。<jupyter_code># 逆行列は inv を使って求める
Ainv = np.linalg.inv(A)
Ainv<jupyter_output><empty_output><jupyter_text>$A^{-1}A=\mathbb{1}$ となることを確認する。<jupyter_code>A * Ainv<jupyter_output><empty_output><jupyter_text>若干見にくいが、[[1,0,0],[0,1,0],[0,0,1]] であることがわかる。 行列式は次のように求める。<jupyter_code># 行列式
np.linalg.det(A)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.19721577726218098, 'fraction_numerical': 0.10440835266821345, 'mean_word_length': 3.3260869565217392, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 35, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '9579', 'license': 'MIT', 'n_tokens_mistral': 1530, 'n_tokens_neox': 1332, 'n_words': 266, 'path': 'linear_numpy_short.ipynb', 'repo_name': 'kalz2q/myjupyternotebooks', 'size': '2586'}