Pythonでは様々な数値計算を簡単に行うことができます。
- 数値計算って苦手…
- 基礎から数値計算を学び直したい
そのような方に向けて、この記事では以下のように数値計算の基礎からNumpyを使用した方法まで解説していきます。
- 数値計算の基本を学ぼう!
- NumPyで数値計算を学ぼう!
数値計算の基本からわかりやすく解説していますので、ぜひ参考にしてくださいね!
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
Pythonで数値計算の基本を学ぼう!
まずは数値計算の基本である四則演算と数値計算の処理でよく使用する割り算の余り、べき乗を学習していきます。
ここでしっかりと基礎を習得して応用的な数値計算ができるように繋げていきましょう!
足し算
まずは基本の足し算の処理です。
プログラミングでも足し算は、+を使って処理することができるのでとてもわかりやすいですね!
print("# 2 + 3") print(2 + 3) print("# 3 + 5") print(3 + 5)
実行結果
# 2 + 3 5 # 3 + 5 8
引き算
次は引き算です。
こちらも引き算は、-を使って処理することができるので理解しやすいかと思います!
print("# 9 - 6") print(9 - 6) print("# 6 - 9") print(6 - 9)
実行結果
# 9 - 6 3 # 6 - 9 -3
掛け算
次は掛け算を見ていきます!
プログラミングで掛け算は、☓ではなく、*を使って処理をするため注意してください。
print("# 2 ☓ 5") print(2 * 5) print("# 4 ☓ 7") print(4 * 7)
実行結果
# 2 ☓ 5 10 # 4 ☓ 7 28
割り算
次は割り算になります。
プログラミングで割り算は、÷ではなく、/を使って処理をするため注意してください。またPythonでは、割り算の整数部のみ求めたい場合は//で簡単に実現することができるので覚えておきましょう!
print("# 10 ÷ 2") print(10 / 2) print("# 10 ÷ 3") print(10 / 3) print("# 10 ÷ 3") print(10 // 3)
実行結果
# 10 ÷ 2 5.0 # 10 ÷ 3 3.3333333333333335 # 10 ÷ 3 3
割り算の余り
次は割り算の余を求める方法です。
初めは用途が理解しにくいかもしれないですが、例えば偶数か奇数かの判定など、プログラミングではよく使用する演算子となるため基礎レベルとしてしっかり覚えておく必要があります!
print("# 10 ÷ 2の余り") print(10 % 2) print("# 10 ÷ 3の余り") print(10 % 3)
実行結果
# 10 ÷ 2の余り 0 # 10 ÷ 3の余り 1
べき乗
次はべき乗です。
普段のプログラミングでの使用頻度は少ないですが、数値計算としては最低限覚えておく必要があります。こちらもしっかりと理解しておきましょう!
print("# 2 の2乗") print(2 ** 2) print("# √2") print(2 ** 0.5) print("2 ** -2") print(2 ** -2)
実行結果
# 2 の2乗 4 # √2 1.4142135623730951 2 ** -2 0.25
それでは、以上で学んだことを踏まえてより実践的なプログラムを以降で書いていきましょう!
Pythonで数値計算の応用を学ぼう!
倍数を見つけるプログラムを書いてみよう!
それでは実践的なプログラムを書いていきましょう!
まずは有名なFizzBuzz問題を題材にして学習していきましょう!
問題自体は基本のレベルではありますが、プログラミング能力を測る上で最低限マスターしておきたいレベルとして面接でも出題されることもあるみたいです。プログラミング初心者の方は是非この機会にマスターしておきましょう!
それでは、こちらがサンプル問題です。
1から20までの数の中で
・3の倍数のときは、「3の倍数です。」
・5の倍数のときは、「5の倍数です。」
・3と5の両方の倍数のときは、「3と5の両方の倍数です。」
と出力するプログラムを書きましょう!
for num in range(1, 21): if num % 3 == 0 and num % 5 == 0: # または if num % 15 == 0: print("3と5の両方の倍数です。") elif num % 3 == 0: print("3の倍数です。") elif num % 5 == 0: print("5の倍数です。") else: print(num)
実行結果
1 2 3の倍数です。 4 5の倍数です。 3の倍数です。 7 8 3の倍数です。 5の倍数です。 11 3の倍数です。 13 14 3と5の両方の倍数です。 16 17 3の倍数です。 19 5の倍数です。
いかがでしょうか。
問題の意味を理解し、しっかり書くことができたでしょうか?
このFizzBuzz問題は書き方によって様々な書き方ができますが、条件をしっかり押さえていればOKです。
気をつけて欲しいのは、両方の倍数に当てはまる場合の条件は一番先頭に書くことです。
先頭に書かないとプログラムが正しく判定されないので注意してくださいね!
ちなみに、2行目のif文は、以下のどちらでも大丈夫です。
if num % 3 == 0 and num % 5 == 0: または if num % 15 == 0:
素数を見つけるプログラムを書いてみよう!
次は、20までの数で素数を見つけるプログラムを書いていきましょう!
素数かどうかの判定は、対象の値を2からその対象の値の手前まで割っていき、割り切れた場合は素数でないため、isPrimeをFalseにしています。
また20までの数で素数を求めたいため、サンプルコード1行目のrange(2, 20+1)で求めたい素数+1を指定して20まで含まれるようにしています。
for i in range(2, 21): isPrime = True for j in range(2, i): if i % j == 0: isPrime = False break if isPrime: print(i)
実行結果
2 3 5 7 11 13 17 19
NumPyで数値計算を学ぼう!
NumPyの使い方 基本
それでは、NumPyを使用した数値計算を学習していきます。
NumPyの配列を使用することで便利な数値計算の処理ができるようになります。Pythonで数値計算と言えば、NumPyを使いこなすことはほぼ必須となるため是非覚えておきましょう。
またNumPyを使用するには事前にインストールが必要となるためご注意ください。
NumPyのインストール方法は以下の記事に掲載されていますのでこちらを参考にしてください!
それでは、NumPyの基本となるNumPy配列を生成する方法を確認しましょう!
以下サンプルコードをみていきましょう!
まず先頭でNumPyをnpとしてimportします。
arangeで配列を生成し、reshapeで配列の形状を変換しています。
import numpy as np print("# 要素が4つの配列を生成する") print(np.arange(4)) print("# 2☓2の行列を生成する") print(np.arange(4).reshape(2, 2))
実行結果
# 要素が4つの配列を生成する [0 1 2 3] # 2☓2の行列を生成する [[0 1] [2 3]]
また行列などNumPyをより活用する方法については以下に詳しく掲載されていますので見てみてください!
NumPyで倍数を見つけるプログラムを書いてみよう!
それでは、NumPyを使用して倍数を見つけるプログラムを書いてみましょう!
以下がサンプルコードになります。
NumPyを使用して倍数を判定することにより、配列の各要素に対して判定できるのでとても便利ですね!
import numpy as np # 3☓5の行列を生成 print("# 3☓5の行列") arr = np.arange(1, 16).reshape(3, 5) print(arr) # 3の倍数かどうか1 print("# 3の倍数かどうか1") print(arr % 3 == 0) # 3の倍数かどうか2 print("# 3の倍数かどうか2") print(np.mod(arr, 3) == 0) # 3の倍数かどうかをメッセージで出力する print("# 3の倍数かどうか") print(np.where(arr % 3 == 0, "3の倍数です", "3の倍数ではありません")) # 3の倍数の個数 print("# 3の倍数の個数") print((arr % 3 == 0).sum()) # 3の倍数を出力 print("# 3の倍数を出力") print(arr[arr % 3 == 0]) # 3の倍数でないものを出力 print("# 3の倍数でないものを出力") print(arr[arr % 3 != 0])
実行結果
# 3☓5の行列 [[ 1 2 3 4 5] [ 6 7 8 9 10] [11 12 13 14 15]] # 3の倍数かどうか1 [[False False True False False] [ True False False True False] [False True False False True]] # 3の倍数かどうか2 [[False False True False False] [ True False False True False] [False True False False True]] # 3の倍数かどうか [['3の倍数ではありません' '3の倍数ではありません' '3の倍数です' '3の倍数ではありません' '3の倍数ではありません'] ['3の倍数です' '3の倍数ではありません' '3の倍数ではありません' '3の倍数です' '3の倍数ではありません'] ['3の倍数ではありません' '3の倍数です' '3の倍数ではありません' '3の倍数ではありません' '3の倍数です']] # 3の倍数の個数 5 # 3の倍数を出力 [ 3 6 9 12 15] # 3の倍数でないものを出力 [ 1 2 4 5 7 8 10 11 13 14]
NumPyで素数を見つけるプログラムを書いてみよう!
次はNumPyを使用した素数を見つけるプログラムを書いてみましょう!
以下サンプルコードになります。
is_prime関数で素数の判定を実施し、NumPyのvectorizeで配列の各要素ごとに判定するようにしています。
NumPyのvectorizeについてはこちらに詳しく掲載されていますので確認してみて下さい。
import numpy as np import math def is_prime(n): if n % 2 == 0 and n > 2: return False return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2)) arr = np.arange(2, 21) vec = np.vectorize(is_prime) print(vec(arr)) print(arr[vec(arr)])
実行結果
[ True True False True False True False False False True False True False False False True False True False] [ 2 3 5 7 11 13 17 19]
まとめ
いかがでしたでしょうか。
今回は、Pythonの数値計算について学習しました!
基本的な数値計算は初学者の方でも比較的取り組みやすかったと思います。
応用編は少し難しかったですが、理解できるようになるとプログラミングの方法や考え方など実務にも活きて来るかと思いますので頑張っていきましょう!
また、Pythonの勉強を始めたばかりで、まだプログラミングについてあまり知識がないという方は、以下の記事も参考になりますので、併せて参考になさってください。