In [1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
In [23]:
# 軸の目盛りになるアレイを用意
points = np.arange(-5,5,0.01)
In [24]:
# グリッドを作る
dx,dy=np.meshgrid(points,points)
In [25]:
dx
Out[25]:
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]])
In [29]:
plt.imshow(dx)
Out[29]:
<matplotlib.image.AxesImage at 0x10ffa84a8>
In [27]:
dy
Out[27]:
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]])
In [28]:
plt.imshow(dy)
Out[28]:
<matplotlib.image.AxesImage at 0x10f762a58>
In [30]:
# sinを使って、ちょっと計算
z = (np.sin(dx) + np.sin(dy))
In [31]:
z
Out[31]:
array([[  1.91784855e+00,   1.92063718e+00,   1.92332964e+00, ...,
         -8.07710558e-03,  -5.48108704e-03,  -2.78862876e-03],
       [  1.92063718e+00,   1.92342581e+00,   1.92611827e+00, ...,
         -5.28847682e-03,  -2.69245827e-03,  -5.85087534e-14],
       [  1.92332964e+00,   1.92611827e+00,   1.92881072e+00, ...,
         -2.59601854e-03,  -5.63993297e-14,   2.69245827e-03],
       ..., 
       [ -8.07710558e-03,  -5.28847682e-03,  -2.59601854e-03, ...,
         -1.93400276e+00,  -1.93140674e+00,  -1.92871428e+00],
       [ -5.48108704e-03,  -2.69245827e-03,  -5.63993297e-14, ...,
         -1.93140674e+00,  -1.92881072e+00,  -1.92611827e+00],
       [ -2.78862876e-03,  -5.85087534e-14,   2.69245827e-03, ...,
         -1.92871428e+00,  -1.92611827e+00,  -1.92342581e+00]])
In [32]:
plt.imshow(z)
#カラーバーを出す
plt.colorbar()
# タイトルを付ける
plt.title("Plot for sin(x)+sin(y)")
Out[32]:
<matplotlib.text.Text at 0x1107a78d0>
In [38]:
# numpy 条件に合った値をとってくる

# 早くないやり方
A = np.array([1,2,3,4])
B= np.array([100,200,300,400])

# 真偽値のアレイ
condition = np.array([True,True,False,False])

# リスト内包表記を使った例
answer = [(a if cond else b) for a,b,cond in zip(A,B,condition)]

answer
Out[38]:
[1, 2, 300, 400]
In [35]:
# numpy.whereを使う
answer2 = np.where(condition,A,B)
answer2
Out[35]:
array([  1,   2, 300, 400])
In [36]:
#np.whereは2次元のアレイにも使える
from numpy.random import randn
arr = randn(5,5)
arr
Out[36]:
array([[ 1.85209886,  0.11736077,  0.9136938 , -0.102727  ,  0.80824558],
       [-0.39361378,  0.04794111, -0.07745432,  0.19476664,  0.74573058],
       [-0.40699106, -0.86044997, -0.6310581 ,  1.43102969, -0.91767696],
       [-0.37094199, -0.32342569, -1.4497822 ,  1.09051298, -0.76274684],
       [-1.27036469,  0.35713101, -0.14854802,  0.82008898, -0.87958531]])
In [37]:
# 0より小さければ0を。そうでなければ、元の値を。
np.where(arr < 0,0,arr)
Out[37]:
array([[ 1.85209886,  0.11736077,  0.9136938 ,  0.        ,  0.80824558],
       [ 0.        ,  0.04794111,  0.        ,  0.19476664,  0.74573058],
       [ 0.        ,  0.        ,  0.        ,  1.43102969,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  1.09051298,  0.        ],
       [ 0.        ,  0.35713101,  0.        ,  0.82008898,  0.        ]])
In [39]:
# その他の統計的な計算
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr
Out[39]:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
In [40]:
# 合計
arr.sum()
Out[40]:
45
In [41]:
#計算を進める軸を指定出来る
arr.sum(0)
Out[41]:
array([12, 15, 18])
In [42]:
#平均
arr.mean()
Out[42]:
5.0
In [43]:
#標準偏差
arr.std()
Out[43]:
2.5819888974716112
In [44]:
#分散
arr.var()
Out[44]:
6.666666666666667
In [45]:
# any と all
bool_arr = np.array([True,False,True])
# 1つでもTrueがあるか
bool_arr.any()
Out[45]:
True
In [46]:
# 全部Trueか?
bool_arr.all()
Out[46]:
False
In [47]:
# アレイをソートする
# ランダムなアレイを作って、
arr = randn(5)
arr
Out[47]:
array([-2.57265788, -0.50075436, -0.34349036, -0.42935277,  0.63587175])
In [48]:
# ソートする
arr.sort()
arr
Out[48]:
array([-2.57265788, -0.50075436, -0.42935277, -0.34349036,  0.63587175])
In [52]:
# uniqueも便利
countries = np.array(['France', 'Japan', 'USA', 'Russia','USA','Mexico','Japan'])
np.unique(countries)
Out[52]:
array(['France', 'Japan', 'Mexico', 'Russia', 'USA'], 
      dtype='<U6')
In [53]:
# in1d test values in one array
np.in1d(['France','USA','Sweden'],countries)
Out[53]:
array([ True,  True, False], dtype=bool)
In [ ]: