環境
Python3
Numpyとは
- Pythonで利用可能な数値演算用ライブラリです。
- 多次元配列の数値計算や配列操作を行う際に便利です。
- 修正BSDライセンス
配列
- 配列の操作が以下のように直感的に実装できます。
# numpyライブラリをインポート
import numpy as np
# 整数型の配列を用意
arr_int32 = np.array([100, 200, 300, 400, 500], dtype=np.int32)
print(arr_int32)
# 浮動小数点型の配列を用意
arr_float = np.array([0.1, 0.2, 0.3, 0.4, 0.5], dtype=np.float64)
print(arr_float)
# 配列通しの計算を + で表現できます。
arr_sum = arr_int32 + arr_float
print(arr_sum)
=>
[100 200 300 400 500]
[0.1 0.2 0.3 0.4 0.5]
[100.1 200.2 300.3 400.4 500.5]
- Numpyライブラリのインポート「import numpy as np」は慣例となっています。as np2 でも、as np3 でも動作しますが、その慣例も文化と思って、尊重しています。
- 上記のように配列の要素通しの計算を簡単に記載できますが、配列の要素数が一致していないと以下のようにエラーとなります。
import numpy as np
arr_int32 = np.array([100, 200, 300, 400, 500], dtype=np.int32)
print(arr_int32)
arr_float = np.array([0.1, 0.2], dtype=np.float64)
print(arr_float)
arr_sum = arr_int32 + arr_float
print(arr_sum)
=>
[100 200 300 400 500]
[0.1 0.2]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-25-a384ac640ecb> in <module>()
6 print(arr_float)
7
----> 8 arr_sum = arr_int32 + arr_float
9 print(arr_sum)
ValueError: operands could not be broadcast together with shapes (5,) (2,)
多次元配列
- 前述の配列と同じく配列の操作が簡単に行えます。
import numpy as np
arr1 = np.array([[1, 2],[100, 200]])
print(arr1)
arr2 = np.array([[3, 4],[300, 400]])
print(arr2)
arr_sum = arr1 + arr2
print(arr_sum)
=>
[[ 1 2]
[100 200]]
[[ 3 4]
[300 400]]
[[ 4 6]
[400 600]]
最小値、最大値などの求め方
import numpy as np
# 1~100までの連番を格納
arr = range(1, 100+1)
# 最小値
print(np.min(arr))
# 最大値
print(np.max(arr))
# 平均
print(np.mean(arr))
# 標準偏差
print(np.std(arr))
# 分散
print(np.var(arr))
# 合計値
print(np.sum(arr))
=>
1
100
50.5
28.86607004772212
833.25
5050
乱数の配列を生成
- Numpyで乱数を生成することも出来ます。
- 可視化してみました。
%matplotlib inline
from matplotlib import pyplot as plt
np.random.seed(10)
arr_ramdom = np.random.randint(1, 101, 100)
plt.hist(arr_ramdom)
plt.show()
ソート処理
- np.sort()で配列のソートが行えます。逆順でソートする際は、 [::-1] を指定します。
np.random.seed(10)
arr_random = np.random.randint(1, 101, 10)
# 昇順
print(np.sort(arr_random))
# 逆順
print(np.sort(arr_random) [::-1] )
=>
[ 1 9 10 16 29 30 65 74 90 94]
[94 90 74 65 30 29 16 10 9 1]
行列を指定してのソート処理
- ソート時に行列を指定する際は、axis で指定します。(0:行、1:列)
- 昇順、逆順の指定は、上記、一次元配列と同様に [::-1] を指定した場合、逆順でソートします。列を逆順でソート時は、[:, ::-1] を指定します。
np.random.seed(1)
# 行列(3×4)
arr_m = np.random.randint(1, 10+1, [3, 4])
print("【0.ソート前】")
print(arr_m)
print("【1.行を昇順でソート】")
print(np.sort(arr_m, axis=0))
print("【2.行を逆順でソート】")
print(np.sort(arr_m, axis=0)[::-1])
print("【3.列を昇順でソート】")
print(np.sort(arr_m, axis=1))
print("【4.列を逆順でソート】")
print(np.sort(arr_m, axis=1)[:, ::-1])