numpy入門6_「arrayを使ったデータ処理」
こんにちは、ワタルです。
さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。
第6回目、「arrayを使ったデータ処理」です。
今回では、以下の関数を使えるようになることが目標です。
dx,dy=np.meshgrid(points,points)#グリッドをつくる plt.imshow(z,cmap="bwr")#カラープロットする plt.colorbar()#カラーバーを示す plt.title("z = sin(x)+sin(y)")#図にタイトルをつける np.where(arr < 0,0,arr)#条件に合った要素を探す arr.sum()#合計 arr.mean()#平均 arr.std()#標準偏差 arr.var()#分散 bool_arr.any()#1つでもTrueがあるか判定する bool_arr.all()# 全部Trueかを判定する arr_s = np.sort(arr)#小さい順に並び替える np.unique(countries)#重複を取り除く np.in1d([x,y,z],countries)#配列の中に任意の要素が存在するか判定する
それでは、よろしくお願い致します。
- おまじない
- グリッドを作る
- カラープロットする
- 条件に合った要素を探す(where関数)
- 様々な統計処理
- anyとall
- sort(arrayを並び替える)
- unique(重複を取り除く)
- in1d(配列の中に任意の要素が存在するか判定する)
おまじない
import numpy as np from numpy.random import randn import matplotlib.pyplot as plt %matplotlib inline
グリッドを作る
points = np.arange(-5,5,0.01)#arrayをつくる dx,dy=np.meshgrid(points,points) dx >>> array([[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], ..., [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99]])
dy >>> array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ], [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99], [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98], ..., [ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97], [ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98], [ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])
np.meshgridの解説
簡単な配列でmeshgrid関数を見てみます。
x3 = np.arange(3) y4 = np.arange(4) x3 >>> array([0, 1, 2])
y4 >>> array([0, 1, 2, 3])
ここでmeshgridしてみます。
dx3,dy4=np.meshgrid(x3,y4) dx3 >>> array([[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]) #dx3はx3という配列が、y4の要素数だけ、行方向に増えたことがわかります
dy4 >>> array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3]]) #dy4はy4という配列が、x3の要素数だけ、列方向に増えたことがわかります
カラープロットする
先で計算した、dx,dyをsin関数で少しいじってカラープロットしてみます。
z = (np.sin(dx) + np.sin(dy))# sin関数で少し計算 plt.imshow(z,cmap="bwr")#カラープロットする plt.colorbar()#カラーバーを出す plt.title("z = sin(x)+sin(y)")# タイトルを付ける >>>
[補足] plt.imshowの引数に「cmap="bwr"」を指定していますが、これはカラープロットの色の指定を意味します。 様々な種類がありますので、詳細はこちらを参照願います。 https://matplotlib.org/examples/color/colormaps_reference.html
条件に合った要素を探す(where関数)
1次元配列に対して
#arrayをつくる A = np.array([1,2,3,4]) B = np.array([100,200,300,400]) TrFa = np.array([True,True,False,False]) #numpy.whereを使う answer = np.where(TrFa,A,B) answer >>> array([ 1, 2, 300, 400]) #AとBに対して、TrueならA、FalseならBの配列を返していることがわかります
2次元配列に対して
arr = randn(5,5)#5×5の配列をつくる arr >>> array([[ 1.82071799, -1.03664279, 0.50066637, 1.93569289, 0.38661873], [-1.42820125, -0.1864199 , -1.57738425, -0.38882376, 0.21758193], [ 0.80581171, -0.12401239, -1.38564015, 1.06400648, -0.86345109], [-0.61646801, 3.29358592, -0.5654698 , 1.77814005, 0.19415474], [-0.31093902, 0.53917403, 0.85159456, -0.63927471, 0.94545253]])
np.where(arr < 0,0,arr) #条件式に合致すれば0を、それ以外は元の値を返していることがわかります >>> array([[1.82071799, 0. , 0.50066637, 1.93569289, 0.38661873], [0. , 0. , 0. , 0. , 0.21758193], [0.80581171, 0. , 0. , 1.06400648, 0. ], [0. , 3.29358592, 0. , 1.77814005, 0.19415474], [0. , 0.53917403, 0.85159456, 0. , 0.94545253]])
様々な統計処理
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])#arrayをつくる arr >>> array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
sum(合計)
arr.sum() >>> 45
arr.sum(0)#合計する列を指定出来る >>> array([12, 15, 18])
mean(平均)
arr.mean()
>>>
5.0
std(標準偏差)
arr.std()
>>>
2.5819888974716112
var(分散)
arr.var()
>>>
6.666666666666667
anyとall
bool_arr = np.array([True,False,True]) #arrayをつくる bool_arr.any()#1つでもTrueがあるか判定する >>> True
bool_arr.all()# 全部Trueかを判定する >>> False
sort(arrayを並び替える)
arr = randn(5)#ランダムなarrayをつくる arr >>> array([ 0.75681233, 1.41480162, 0.03750724, -0.18838668, 0.16019609])
arr_s = np.sort(arr)#小さい順に並び替える arr_s >>> array([-0.18838668, 0.03750724, 0.16019609, 0.75681233, 1.41480162])
arr_r = np.sort(arr)[::-1]#大きい順に並び替える arr_r >>> array([ 1.41480162, 0.75681233, 0.16019609, 0.03750724, -0.18838668])
unique(重複を取り除く)
countries = np.array(['France', 'Japan', 'USA', 'Russia','USA','Mexico','Japan'])#arrayをつくる np.unique(countries) >>> array(['France', 'Japan', 'Mexico', 'Russia', 'USA'], dtype='<U6')
in1d(配列の中に任意の要素が存在するか判定する)
np.in1d(['France','USA','Sweden'],countries) >>> array([ True, True, False], dtype=bool) #np.in1d(x,y)では、xの各要素がyに存在するかを判定できていることがわかります
第7回はこちら。
それじゃー、また。