仕事上、早々にを使えるようにしないといけないため、
を基に学んでいく。
前回
3. NumPyの基礎:配列とベクトル演算
は""の意味ででの数値計算におけるもっとも重要な基本パッケージの1つである。
3.5 ndarrayによる配列指向プログラミング
を用いると、ベクトル演算が利用でき、ループ処理を書く必要が無くなる。
#################################### ### ベクトル演算の速さをチェック ### #################################### import numpy as np import matplotlib.pyplot as plt points = np.arange(-5,5,0.01) xs, ys = np.meshgrid(points, points) print(ys) z = np.sqrt(xs ** 2, ys ** 2) print(z) plt.imshow(z, cmap = plt.cm.gray) plt.colorbar() plt.title("Image of plot of $\sqrt{x^2 + y^2}$ for a grid of values")
3.5.1 条件制御のndarrayでの表現
################ ### 条件制御 ### ################ # numpy.where: x if condition else yに相当 import numpy as np ### ① xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5]) yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5]) cond = np.array([True, False, True, True, False]) # 以下をnumpy.whereで書くことを考える result1 = [(x if c else y) for x, y, c in zip(xarr, yarr, cond)] print(result1) result2 = np.where(cond, xarr, yarr) print(result2) err = [abs(x - y) for x, y in zip(result1, result2)] print(err) ### ② arr = np.random.randn(4, 4) cond = arr > 0 print(cond) np.where(arr > 0, 2, -2) y = np.where(arr > 0, 2, arr) print(y)
3.5.2 数学関連、統計関連
の数学・統計関数を一部紹介する。
import numpy as np arr = np.random.randn(5, 4) print(arr) # mean = arr.mean() # np.mean(arr)という書き方もあり print(mean) # sum_total = arr.sum() sum_by_row = arr.sum(axis = 0) # 行方向 sum_by_col = arr.sum(axis = 1) # 列方向 print(sum_total) print(sum_by_row) print(sum_by_col) # arr = np.array([0,1,2,3,4,5,6,7]) cum_total = arr.cumsum() print(cum_total)
関数 | 定義 |
---|---|
配列の和を指定した軸に沿って取る。長さの配列にはを返す。 | |
算術平均。長さの配列にはを返す。 | |
標準偏差、分散。自由度のデフォルト値はで任意の値を指定可能。 | |
最小値、最大値 | |
最小値・最大値を持つ要素のインデックス | |
累積和 | |
累積積 |
3.5.3 真偽値配列関数
真偽値に関数を適用すると、は、はとして扱う。そのため、真偽値配列にを適用すると、その中のの数を数える。
bools = np.array([False, False, True, False]) bools.any() # 少なくとも1つTrueがあるか否か bools.all() # すべての要素がTrueであるか否か
3.5.4 ソート
も関数で並び替えることができる。これは元のを直接置換する。
########################### ### ndarrayをソートする ### ########################### import numpy as np arr = np.random.randn(6) print('ソート前:') print(arr) arr.sort() print('ソート後:') print(arr) # 応用:5パーセント点を計算 large_arr = np.random.randn(1000) large_arr.sort() large_arr_lower_5_percent = large_arr[int(0.05 * len(large_arr))] print(large_arr_lower_5_percent)
3.5.5 集合関数
関数 | 説明 |
---|---|
の重複を除外してソートした値 | |
共通部分 | |
和集合 | |
配列に対しての要素が含まれるかを調べる。 | |
からへの差集合 | |
排他的論理和(いずれか一方のみに含まれる元) |
################ ### 集合関数 ### ################ names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe']) names_unique = np.unique(names) print(names_unique) np.in1d(names, ['Joe','Jean', 'Paul'])