2  Python 入門

現代社会において、システム工学の手法は生産システム、交通システムなど、様々な分野で応用されている。これらのシステムは大規模で複雑であるため、コンピュータを使ったプログラミングが不可欠である。本書では、理論を紹介するとともに、Pythonを使って数式やアルゴリズムを実装し、実際の問題を解決する方法を学ぶ。

想定読者は、C言語の基礎を理解している。ここでは、Python を系統的に学ぶことを目的とせず、与えられたコードを理解し、軽く修正して応用できることを目指す。

2.1 なぜ Python なのか

システム工学の主な手法として、データ分析、モデリング、シミュレーション、最適化、機械学習などがある。Python のコミュニティは非常に活発であり、これらの手法を実装するための豊富なライブラリが提供されている。例えば、機械学習の分野では、TensorFlow や PyTorch などのライブラリが広く利用されている。また、データ分析には Pandas、数値計算には NumPy や SciPy がよく使われる。最適化のソルバーとしては、SciPy の optimize モジュールや、PuLP、Gurobi などがある。

さらに、Python は初心者にとって学びやすい言語であり、コードが読みやすく、書きやすいという特徴がある。

2.2 ソースコードの実行

本書で提供している python のソースコードは、以下の手順で実行できる。

  1. Google アカウントにログインする。
  2. Google Colab にアクセスする。
  3. 「+ New notebook」をクリックする。(日本語環境の場合は「+ 新規ノートブック」)
  4. ソースコードをコピーして、セルに貼り付ける。
  5. セルの左側にある「▶」ボタンをクリックして、コードを実行する。

Exercise 2.1 Google Colab で以下のコードを実行し、Hello, World! と表示されることを確認せよ。

print("Hello, World!")

2.3 変数

変数とは、データを格納するための名前付きの入れ物である。

整数、浮動小数点数、文字列、ブール値など、様々なデータ型を格納できる。変数は、= 演算子を使って値を代入する。

x = 10          # 整数
y = 3.14        # 浮動小数点数
name = "Alice"  # 文字列
is_student = True  # ブール値

print(x)         
print(y)        
print(name)      
print(is_student)  

Exercise 2.2 新しいセルを作成し、変数 a に 5 を代入し、print() 関数を使って a の値を表示せよ。

2.4 リスト

リストは、複数の値を順序付けて格納するためのデータ構造である。リストは、角括弧 [] を使って作成し、カンマ , で区切られた要素を含む。

fruits = ["apple", "banana", "cherry"]
print(fruits)  

numbers = [1, 2, 3, 4, 5]
print(numbers)

Exercise 2.3 リスト colors に “red”, “green”, “blue” の3つの要素を格納し、print() 関数を使って colors の値を表示せよ。

2.5 関数の呼び出し

関数は、特定の処理を行うコードのまとまりであり、引数を受け取り、結果を返すことができる。Python には多くの組み込み関数があり、例えば print() 関数は引数として与えられた値を表示する。

次のコードは、print() 関数を使って、文字列、整数、浮動小数点数、演算結果、リストを表示する例である。

print("This is a sample text.")
print(1)
print(3.14)
print(1 + 2)

numbers = [1, 2, 3, 4, 5]
print(numbers)
This is a sample text.
1
3.14
3
[1, 2, 3, 4, 5]

len() 関数は、リストや文字列の長さを返す。fruits リストは3つの要素を持つため、len(fruits) は3を返す。

fruits = ["apple", "banana", "cherry"]
length = len(fruits)
print(length)  # 3

他にも、sum() 関数はリストの要素の合計を計算し、max() 関数はリストの最大値を返す。

Example 2.1 sum() 関数を使って、リスト numbers の要素の合計を計算せよ。

numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(total)  # 15

Exercise 2.4 max() 関数を使って、リスト numbers の最大値を計算せよ。

2.6 関数の定義

関数は、引数を受け取り、処理を行い、結果を返すコードのまとまりである。Python では、def を使って関数を定義する。

Example 2.2 \(f(x) = 2x + 1\) を計算する関数 f を定義せよ。

def f(x):
    return 2 * x + 1

print(f(3))  

Example 2.3 \(f(x, y) = x^2 + y^2\) を計算する関数 f を定義せよ。

def f(x, y):
    return x**2 + y**2

print(f(3, 4))

Exercise 2.5 \(f(x) = 3x^2 - 4x + 5\) を計算する関数 f を定義せよ。

2.7 モジュール

Python では、import 文を使って、様々なモジュールを利用できる。以下のようにモジュールをインポートし、モジュール名.関数名() という形式で関数を呼び出す。

import モジュール名

例えば、数学関数を提供する math モジュールをインポートし、平方根を計算する sqrt() 関数を使うことができる。

import math

result = math.sqrt(16)
print(result)  # 4.0

Exercise 2.6 math モジュールの fabs() 関数は、引数の絶対値を返す。-10 の絶対値を計算せよ。

2.8 NumPy

NumPy は、数値計算を効率的に行うためのライブラリであり、多次元配列を扱うことができる。通常、以下のようにインポートし、np という別名を付けて使用する。

import numpy as np

次のコードは、np.array() 関数を使って、スカラーを作成する例である。

import numpy as np

# スカラーの作成
scalar = np.array(5)
print(scalar)  # 5
5

次のコードは、np.array() 関数を使って、1次元配列を作成する例である。これは線形代数におけるベクトルに対応する。

import numpy as np

# 1D 配列の作成
a = np.array([1, 2, 3, 4, 5])
print(a)
[1 2 3 4 5]

次のコードは、np.array() 関数を使って、2次元配列を作成する例である。これは線形代数における行列に対応する。

import numpy as np

# 2D 配列の作成
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
[[1 2 3]
 [4 5 6]]

NumPy を使うと、配列同士の演算を簡単に行うことができる。例えば、2つの2次元配列の要素ごとの和を計算するには、以下のようにする。

import numpy as np

# 2D 配列の作成
A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[7, 8, 9], [10, 11, 12]])
C = A + B

print(C)
[[ 8 10 12]
 [14 16 18]]

この演算を数式で表現すると、以下のようになる。

\[ \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}+ \begin{bmatrix} 7 & 8 & 9 \\ 10 & 11 & 12 \end{bmatrix}= \begin{bmatrix} 8 & 10 & 12 \\ 14 & 16 & 18 \end{bmatrix} \]

NumPy は様々な数学関数を提供しており、配列に対して簡単に適用できる。例えば、次のようにnp.sum() 関数を使って、配列の要素の合計を計算できる。

import numpy as np

array = np.array([1, 2, 3])
total = np.sum(array)
print(total)
6

2.9 解答例

Solution 2.1. 下記の内容が表示されれば成功。

Hello, World!

Solution 2.2.

a = 5
print(a)  # 5

Solution 2.3.

colors = ["red", "green", "blue"]
print(colors)  # ['red', 'green', 'blue']

Solution 2.4.

numbers = [1, 2, 3, 4, 5]
maximum = max(numbers)
print(maximum)  # 5

Solution 2.5.

def f(x):
    return 3 * x**2 - 4 * x + 5

print(f(2))  # 7

Solution 2.6.

import math
result = math.fabs(-10)
print(result)  # 10.0