<jupyter_start><jupyter_text>Python を使ってネットワーク科学の問題を解決しようChapter 1. 最適化問題とPython プログラミングの初歩----明治大学理工学部情報科学科  飯塚 秀明  ベクトル (ndarray)Python でベクトル(数の並び) を表すには、`np.array` 関数を用います。例えば、3 要素のベクトル\begin{align}  \begin{pmatrix}1\\ 2\\ 3\end{pmatrix}\end{align}を表現するには、```pythonimport numpy as npnp.array([1, 2, 3])```とします。ここで、`import numpy as np` という文は、「ベクトルなどを表現するための機能NumPy を`np` という名前で読み込んでください」という意味で、`np.array` 関数などを使用する前に**あらかじめ１回**実行しておく必要があります。次の行、`np.array([1, 2, 3])` が、実際にベクトルを生成する命令です。それぞれの注ぎ口の実行結果は最後の行を計算した値が表示されるので、この場合は、```pythonarray([1, 2, 3])```と表示されれば成功です。少し変な表記に思われるかもしれませんが、これが先のベクトルを表すPython 上での表現になります。**【課題】下の注ぎ口に、3要素のベクトル$(1, 2, 3)^\top$ を生成するPython プログラムを書いて実行してみましょう。**  ベクトルの足し算、引き算、スカラー(実数) 倍同じ要素数のベクトル同士は、足したり引いたりすることができます。その場合、下記のように成分同士の足し算、引き算となります。\begin{align}\begin{pmatrix}a\\ b\end{pmatrix}+\begin{pmatrix}c\\ d\end{pmatrix}:=\begin{pmatrix}a+c\\ b+d\end{pmatrix},\quad\begin{pmatrix}a\\ b\end{pmatrix}-\begin{pmatrix}c\\ d\end{pmatrix}:=\begin{pmatrix}a-c\\ b-d\end{pmatrix}.\end{align}足し算や引き算は、普通の数学表記と同様に`+` や`-` 記号を用いて記述できます。例えば、２要素のベクトル$(5, 3)^\top$ と$(1, 2)^\top$ の足し算は、```pythonimport numpy as npx = np.array([5, 3])y = np.array([1, 2])x + y```と記述でき、その実行結果は、```pythonarray([6, 5])```となります。ベクトルはスカラー(実数) 倍することもでき、その場合、下記のように各要素に実数を乗ずることになります。\begin{align}c\begin{pmatrix}a\\ b\end{pmatrix}:=\begin{pmatrix}ca\\ cb\end{pmatrix}\end{align}ベクトルの実数倍には、`*` 記号を用います。例えば、２要素のベクトル$(5, 3)^\top$ を2 倍するには下記のように記述します。```pythonimport numpy as npx = np.array([5, 3])2 * x```**【課題】下の３つの注ぎ口で、ベクトルの足し算、引き算、スカラー(実数) 倍の計算を確認してみましょう。**  ベクトルの各成分ベクトル`v` の各成分の値は、`v[番号]` で取得・設定できます。ここで、`番号` は0 から始まることに注意してください。**【課題】下の２つの注ぎ口にあるプログラムについて、それぞれ実行結果を予想してみましょう。予想できたら実行して、予想と実際が同じかどうかを確認してください。**<jupyter_code>import numpy as np
x = np.array([1, 2, 3])

x[0]
import numpy as np
x = np.array([1, 2, 3])
x[0] = 0

x<jupyter_output><empty_output><jupyter_text>ベクトル同士の内積同じ要素数のベクトル同士の内積、\begin{align}\left\langle \begin{pmatrix}a\\ b\end{pmatrix}, \begin{pmatrix}c\\ d\end{pmatrix} \right\rangle:= ac + bd\end{align}は、`np.inner` 関数により計算できます。**【課題】下の注ぎ口にあるプログラムについて、実行結果を予想してみましょう。予想できたら実行して、予想と実際が同じかどうかを確認してください。**<jupyter_code>import numpy as np
x = np.array([5, 3])
y = np.array([1, 2])

np.inner(x, y)<jupyter_output><empty_output><jupyter_text>行列行列(数の２次元的な並び) も、ベクトル同様に`np.array` 関数を用いて生成できます。次の行列、\begin{align}  \begin{pmatrix}    1 & 2 \\    3 & 4 \\  \end{pmatrix}\end{align}は、次の注ぎ口にあるプログラムのように記述します。<jupyter_code>import numpy as np

np.array([[1, 2], [3, 4]])<jupyter_output><empty_output><jupyter_text>行列の各成分行列`A` の各成分の値は、`A[行番号, 列番号]` で取得・設定できます。ベクトルの各成分のときと同様に、`行番号`や`列番号` は0 から始まることに注意してください。**【課題】下の２つの注ぎ口にあるプログラムについて、それぞれ実行結果を予想してみましょう。予想できたら実行して、予想と実際が同じかどうかを確認してください。**<jupyter_code>import numpy as np
A = np.array([[1, 2], [3, 4]])

A[0, 0]
import numpy as np
A = np.array([[1, 2], [3, 4]])
A[0, 0] = 5

A<jupyter_output><empty_output><jupyter_text>行列とベクトルの積行列とベクトルの積、\begin{align}  \begin{pmatrix}a & b\\ c & d\end{pmatrix}\begin{pmatrix}e\\ f\end{pmatrix}  := \begin{pmatrix}ae + bf\\ ce + df\end{pmatrix}\end{align}は、`np.dot` 関数を用いて計算します。**【課題】下の注ぎ口を実行して、計算結果を確認してみましょう。**<jupyter_code>import numpy as np
A = np.array([[1, 2], [3, 4]])
x = np.array([5, 6])

np.dot(A, x)<jupyter_output><empty_output><jupyter_text>連立一次方程式連立一次方程式\begin{align}  \begin{cases}    ax + by = c \\    dx + ey = f  \end{cases}\end{align}は、行列とベクトルを用いて、\begin{align}  \begin{pmatrix}    a & b \\    d & e  \end{pmatrix}  \begin{pmatrix}x\\ y\end{pmatrix}  =\begin{pmatrix}c\\ f\end{pmatrix}\end{align}とも書けます。この行列$\begin{pmatrix}a & b\\ d & e\end{pmatrix}$ とベクトル$\begin{pmatrix}c\\ f\end{pmatrix}$ を与えて、解$\begin{pmatrix}x\\ y\end{pmatrix}$ を求めるには、`np.linalg.solve` 関数を用います。**【課題】下の注ぎ口のプログラムを穴埋めして、はじめの問題を解いてみましょう。**| 食品＼含まれているもの | ビタミン (mg) | ミネラル (mg) || ---- | ---- | ---- || A | 0.10 | 4.5 || B | 0.15 | 3.0 |条件: ビタミンは合わせて3mg 以上、ミネラルは合わせて90mg 以上とる。合計量はなるべく少なくしたい。<jupyter_code>import numpy as np
A = np.array([[?, ?], [?, ?]])
x = np.array([?, ?])

np.linalg.solve(A, x)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.203847114664002, 'fraction_numerical': 0.02398201348988259, 'mean_word_length': 6.992015968063872, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, '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': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '379060', 'license': 'MIT', 'n_tokens_mistral': 2680, 'n_tokens_neox': 2588, 'n_words': 235, 'path': 'chap01.ipynb', 'repo_name': 'iiduka-researches/python-network-science', 'size': '4003'}