動画は省略します。 他のファイルに従って実行すれば、テキストの Chapter15は同じように実行できます。
import numpy as np
は1度でいいから、先頭行にいれてください。2つめ以降のプログラム
リストからは省略されています。
================================================================
P344
●numpyモジュールにnpの別名と付けてインポートする
ximport numpy as np
●リストから配列を作る
xxxxxxxxxximport numpy as npa = np.array([1, 2, 3])print(a)
●配列をprint()で出力する
xxxxxxxxxximport numpy as npa = np.array([1, 2, 3])print(a)
P345 ●タプルから配列を作る
xxxxxxxxxximport numpy as npdata = (1, 2, 3)a = np.array(data)print(a)
●配列オブジェクトの型を調べる
xatype(a)
●配列の要素の型を調べる
xxxxxxxxxximport numpy as npa = np.array([1, 2, 3])print(a.dtype)
●型が混在している配列は作ることができない
xxxxxxxxxximport numpy as npa = np.array([1, 1.5, 2]) # intとfloatprint(a)b = np.array(["1", 1.5, 2]) # 文字列と数値print(b)c = np.array([True, False, 1.5]) # 論理値と数値print(c)
P246
●要素の型を指定して配列を作る
xxxxxxxxxximport numpy as npa = np.array([1, 1.5, 2], dtype=int) # 整数型で作るprint(a)b = np.array([1, 2, 3], dtype=float) # 浮動小数点型で作るprint(b)c = np.array([1, 1.5, 2], dtype=complex) # 複素数型で作るprint(c)
●文字列に変換して配列を作る
xxxxxxxxxximport numpy as npd = np.array([1, 1.5, 2], dtype="<U") # 文字列型で作るprint(d)e = np.array([9.123, 10.5, 12.11], dtype="<U4")print(e)
●int型の配列をもとにfloat型の配列を作る
xxxxxxxxxximport numpy as npa_int = np.array([0, 1, 2, 3, 4, 5])a_float = np.array(a_int, dtype=float)print(a_float)
P347
●多重リストから2行3列の配列を作る
xxxxxxxxxximport numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])print(a)
●3×3の配列を作る
xxxxxxxxxximport numpy as npline1 = [10, 20, 30]line2 = [40, 50, 60]line3 = [70, 80, 90]a = np.array([line1, line2, line3])print(a)
P348
●1次元配列を2行3列の配列に変換する
xxxxxxxxxximport numpy as npdata = [1, 2, 3, 4, 5, 6]a = np.array(data)print(a)a = a.reshape(2, 3)print(a)
●1次元配列を2行3列の配列に変換する
xxxxxxxxxximport numpy as npdata = [1, 2, 3, 4, 5, 6]a = np.array(data).reshape(2, 3)print(a)
●多次元配列を1次元配列にする
xxxxxxxxxximport numpy as npa = np.array([[0,1], [2,3], [4,5]])a.ravel()print(a.ravel())a.flatten()print(a.flatten())
P349
●配列の構造を調べる
xxxxxxxxxximport numpy as npa = np.array([[0,1], [2,3], [4,5]])print(a)print(a.shape)print(a.ndim)
●配列の要素の個数
ximport numpy as npa = np.array([[0,1], [2,3], [4,5]])a.sizeprint(a.size)
P350
●配列に要素を追加する
ximport numpy as npa = np.array([0, 1, 2])b = np.append(a, 3) # 3を追加するprint(a)print(b)
●配列に同時に複数の値を追加する
ximport numpy as npa = np.array([0, 1, 2])b = np.append(a, [3, 4, 5]) # 同時に3個の値を追加するprint(b)
●2×3の配列に行を追加する
xxxxxxxxxximport numpy as npa = np.array([1, 2, 3, 4, 5, 6]).reshape(2, 3)print(a)b = np.append(a, [[7, 8, 9]], axis = 0)print(b)
P351
●配列に要素を挿入する
xxxxxxxxxximport numpy as npa = np.array([0, 1, 2])b = np.insert(a, 1, 99)print(b)
●配列にリストの要素を挿入する
xxxxxxxxxximport numpy as npb = np.insert(a, 1, [88, 99])print(b)
●文字列を挿入すると最長の文字列に合わせた長さで切れる
xxxxxxxxxximport numpy as npwords = np.array(["dog", "cat", "bird"])new_words = np.insert(words, 0, "snake")print(new_words)
●最後の要素を削除した配列を作る
xxxxxxxxxximport numpy as npwords = np.array(["dog", "cat", "bird"])new_words = np.delete(words, len(words)-1)print(new_words)
P352
●配列の行と列の要素を入れ替える
xxxxxxxxxximport numpy as npa = np.array([[0,1], [2,3], [4,5]])print(a)np.transpose(a) # transpose()で転置する
a.T # Tで転置する
print(a)
●1×5の配列を5×1の配列にする
xxxxxxxxxximport numpy as npprint(a.T) ## これは 間違ったかも 森本a = np.array([0, 1, 2, 3, 4])b = a[:, np.newaxis]print(b)
●配列をリストに変換する
xxxxxxxxxximport numpy as npa = np.array([1, 2, 3, 4, 5])b = np.array([[0,1], [2,3], [4,5]])a.tolist()print(a.tolist())b.tolist()print(b.tolist())
-----------------以下 15-2-------------------------------- P353
●配列の先頭、2番目、最後の要素を調べる
xxxxxxxxxximport numpy as npa = np.array([10, 20, 30, 40, 50])print(a[0])print(a[1])print(a[-1])
●配列の3番目の値を99に変更する
xxxxxxxxxximport numpy as npaprint(a)a[2] = 99aprint(a)
P354
●3行3列の配列の要素にアクセスする
xxxxxxxxxximport numpy as npdata = [10, 20, 30, 40, 50, 60, 70, 80, 90]a = np.array(data).reshape(3, 3)print(a)a[0,0]print(a[0,0])a[1,0]print(a[1,0])a[1,1]print(a[1,1])a[1,0]print(a[1,0])a[2,-1]print(a[2,-1])
●1次元配列aから2次元配列bを作る
xxxxxxxxxximport numpy as npa = np.array([10, 20, 30, 40])b = a.reshape(2, 2)print(a)print(b)
P355
●reshape()で作った配列bを変更すると元の配列aも変更される a is b # 同じオブジェクトではない
xxxxxxxxxximport numpy as npb[0,0] = 99 # 配列bの要素を99に書き替えるprint('b= ',b)
a # 配列aの要素も99に書き替わってしまった
xxxxxxxxxxprint('a= ',b)
●配列をスライスする
xxxxxxxxxximport numpy as npdata = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90])print('data=',data)print("data[:]=",data[:]) # すべての要素(複製したことになります)print('data[:4]=',data[:4]) # 最初からインデックス番号3までprint('data[4:]=',data[4:]) # インデックス番号4から最後までprint('data[3:7]=',data[3:7]) # インデックス番号3~6print('data[::2]=',data[::2]) # 先頭から1個飛び
●要素を逆順にした配列を作る
xxxxxxxxxxdata[::-1] # 末尾から1個ずつ取り出す
P356
●多次元配列のスライス
xxxxxxxxxximport numpy as npdata = [10, 20, 30, 40, 50, 60, 70, 80, 90]a = np.array(data).reshape(3, 3)print(a)a[:2,]print('a[:2,]=',a[:2,])a[:,1:]print("a[:,1:]=",a[:,1:])a[1:,1:]print('a[1:,1:]=',a[1:,1:])
●スライスと同時に型変換する
xxxxxxxxxximport numpy as npdata = [2.1, 3.5, 2.5, 4.3, 5.1, 1.6]a = np.array(data).reshape(3, 2)print ('a=',a)a2 = a[:2,].astype(int) # 最初の2行を取り出す際に整数に変換するprint('a2=',a2)
P357
●配列の要素を順に取り出す
xxxxxxxxxximport numpy as npdata = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90])print(data)for item in data:print(item)
●enumerate()を使って要素を順に取り出す
xxxxxxxxxximport numpy as npwords = ["flower", "bird", "wind", "moon"]for i, item in enumerate(words, 1):print(i, item)
●多次元配列の要素を順に取り出す
xxxxxxxxxximport numpy as npdata = np.array([10, 20, 30, 40, 50, 60]).reshape(2, 3)print(data)for i, item in np.ndenumerate(data):print(i, item)
P358
●5以上の値を抽出する
xxxxxxxxxximport numpy as npa = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3])print('a=',a)print(a[a>=5])
●偶数、奇数を分ける
xxxxxxxxxxprint('偶数=',a[a%2 == 0]) # 偶数print('奇数=',a[a%2 == 1]) # 奇数
●多次元配列から5より大きな値を抽出する
xxxxxxxxxxb = a.reshape(4, 4) # 4×4の配列にするprint(b)print(b[b>5])
P359
●5以上の奇数
xxxxxxxxxximport numpy as npa = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3])b=a[(a>=5) & (a%2 == 1)]print(b)
●2または3の倍数
xxxxxxxxxxb = a[(a%2 == 0) | (a%3 == 0)]print(b)
●3の倍数ではない値
xxxxxxxxxxb=a[~(a%3==0)]print(b)
●偶数は0、奇数は1に置き換える
xxxxxxxxxximport numpy as npa = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3])a = a.reshape(4, 4)print(a)array([[3, 1, 4, 1],a[a%2==0] = 0 # 偶数を0に置き換えるprint(a)b=array([[3, 1, 0, 1],print(b)a[a%2==1] = 1 # 奇数を1に置き換えるprint(a)
P360
●sort()メソッドで配列を昇順にソートする
xxxxxxxxxximport numpy as npa = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3])a.sort()a
●sort()関数でリストからソート済みの配列を作る
xxxxxxxxxximport numpy as npa = np.sort([4, 6, 3, 9, 1, 2, 5])a
●降順にソート済みの配列を作る
xxxxxxxxxximport numpy as npa = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3])a_descend = np.sort(a)[::-1] # ソートした後で逆順にスライスするa_descend
--------------- 以下 15-3 ----------------------- P361
●配列のすべての要素に5を足す
xxxxxxxxxximport numpy as npA = np.array([10, 20, 30, 40]).reshape(2, 2)print(A)B = A + 5print(B)
●配列に対して引き算、掛け算、割り算を行う
xxxxxxxxxxprint(A)print(A - 5)print(A * 2)print(A / 2)
P362
●ベクトルaを行列Aで表す
xxxxxxxxxximport numpy as npp0 = np.array((1, 1))p1 = np.array((6, 4))A = p1 - p0print(A)
●ベクトルaの長さ
xxxxxxxxxximport numpy as npa_norm = np.linalg.norm(A)print(a_norm)
●ベクトルaの2倍の長さのベクトル
xxxxxxxxxximport numpy as npA2 = A*2print(A2)a2_norm = np.linalg.norm(A*2)print(a2_norm)
P363
●配列の要素を合計する
xxxxxxxxxximport numpy as npA = np.array([56, 45, 83, 67, 59, 41]).reshape(2, 3)print(A)A.sum() # 全体の合計print('全体の合計=',A.sum())A.sum(0) # 各列の合計print('各列の合計=',A.sum(0))A.sum(1) # 各行の合計print('各行の合計',A.sum(1))
●配列の最大値、最小値を求める
xxxxxxxxxxprint(A.max()) # 全体の最大値print(A.max(0)) # 各列の最大値print(A.max(1)) # 各行の最大値print(A.min()) # 全体の最小値print(A.min(0)) # 各列の最小値print(A.min(1)) # 各行の最小値print(A.mean()) # 全体の平均print(A.mean(0)) # 各行の平均値print(A.mean(1)) # 各列の平均値
●numpyの関数を使う場合の書き方
xxxxxxxxxximport numpy as npprint(np.sum(A)) # Aの合計値print(np.max(A,1)) # Aの各行の最大値
P364
import numpy as np sigma = 3.5 # 分散 mu = 65 # 平均
● 得点は乱数で
xxxxxxxxxximport numpy as npdata = sigma * np.random.randn(200) + mumsg = "得点は?:".format(max, min)x = float(input(msg)) # 得点t_score = 10*(x - data.mean())/data.std() + 50 # 偏差値print("平均点:", round(data.mean(),1 ))print("標準偏差:", round(data.std(), 1)) # 標準偏差print("偏差値:", round(t_score, 1))
●5より大きい要素が入っている位置を調べる
xxxxxxxxxximport numpy as npA = np.array([4, 6, 3, 1, 7, 3])B = (A>5) # 5より大きい要素が入っている位置をTrueにするprint(B)
P365
●同じ行列数の配列の足し算
xxxxxxxxxximport numpy as npA = np.array([1, 2, 3, 4]).reshape(2, 2)print(A)B = np.array([10, 20, 30, 40]).reshape(2, 2)print(B)C = A + B # 同じ行列数の配列の足し算print(C)
●同じ行列数の配列の掛け算、割り算
xxxxxxxxxxD = A * BE = A / Bprint(D)print(E)
P366
●ベクトルaとbを足したベクトルcを求める
xxxxxxxxxximport numpy as npA = np.array([5, 3])B = np.array([4, -2])C = A + Bprint(C)
●ベクトルaからbを引いたベクトルcを求める
xxxxxxxxxxC = A - Bprint(C)
P367
●行数が足りない配列を足す
xxxxxxxxxximport numpy as npA = np.array([1, 2, 3, 4]).reshape(2, 2)print(A)B = np.array([100, 200])print(B)C = A + B # 行数が足りない配列を足すprint(C)
●列数が足りない配列を足す
xxxxxxxxxximport numpy as npA = np.array([1, 2, 3, 4, 5, 6]).reshape(2,3)print(A)B = np.array([10, 20]).reshape(2,1)print(B)C = A + B # 列数が足りない配列を足すprint(C)
P368
●行列の内積
xxxxxxxxxximport numpy as npA = np.array([[1, 2],[3, 4]])B = np.array([[5, 6],[7, 8]])C = np.dot(A, B)print(C)
P369
●仕事を内積dot()で計算する
xxxxxxxxxximport numpy as npF = np.array([8.66, 5.0]) # ベクトルFS = np.array([20, 0]) # ベクトルSW = np.dot(F, S) # 仕事(内積)を求めるprint(W)
●dot()の結果を検算する
xxxxxxxxxximport numpy as npf = np.linalg.norm(F) # ベクトルFの長さs = np.linalg.norm(S) # ベクトルSの長さrad = np.radians(30) # 30度をラジアンに換算w = f*s*np.cos(rad) # 仕事を計算するprint(w)
P370
●3次元ベクトルa、bの外積となるベクトルcを求める
xxxxxxxxxximport numpy as npa = np.array([1, 2, 0])b = np.array([0, 1, -1])c = np.cross(a, b) # 外積print(c)
●math.sin()とnumpy.sin()の違い
xxxxxxxxxximport numpy as npimport mathimport numpy as npdata = [0.0, 0.28, 0.57, 0.85, 1.14, 1.42, 1.71, 1.99, 2.28, 2.57, 2.85, 3.14]print(math.sin(data))print(np.sin(data))
P371
●配列の値でSinグラフを描く
xxxxxxxxxximport numpy as npimport matplotlib.pyplot as pltX = np.linspace(-np.pi, np.pi, 180)Y = np.sin(X)plt.plot(X, Y) # グラフを作図するplt.show()
--------------------------- 以下 15-4 ---------------- P372
●0~9の配列を作る
xxxxxxxxxximport numpy as npprint(np.arange(10))
●n×mの配列を作る
xxxxxxxxxxn = 3 # n行m = 4 # m列print(np.arange(n*m).reshape(n, m))
●10以上、20未満の偶数の配列
xxxxxxxxxxprint(np.arange(10, 20, 2))
P373
●行列A、Bの要素が同じかどうかを比較する
xxxxxxxxxximport numpy as npA = np.array([1, 2, 3, 4, 5, 6]).reshape(2, 3)B = np.array([1, 2, 9, 4, 8, 6]).reshape(2, 3)print(A)print(B)C = (A == B) # AとBを比較した結果の配列Cを作りますprint(C)
●行列A、Bを比較して要素が異なる個数を数える
xxxxxxxxxximport numpy as npA = np.array([1, 2, 3, 4, 5, 6]).reshape(2, 3)B = np.array([1, 2, 9, 4, 8, 6]).reshape(2, 3)n = (A != B).sum() # 要素が異なる数を数えるprint(n)
●開始値は省略し、0.5刻みのステップを指定する
xxxxxxxxxxnp.arange(10, step = 0.5)
P374
●0~120を16分割した配列を作る
xxxxxxxxxxnp.linspace(0, 120, 16)
●値がint型で3行2列の行列を作る
xxxxxxxxxxZERO = np.empty((3,4), dtype=None)print(ZERO)
P375
●4行4列の単位行列を作る
xxxxxxxxxxE = np.identity(4)print(E)
●eye()を使って単位行列を作る
xxxxxxxxxxE = np.eye(3)print(E)
●整数値の単位行列を作る
xxxxxxxxxxE = np.identity(3, dtype=int)print(E)
●0が10個埋まった配列を作る
xxxxxxxxxxZERO = np.zeros(9, dtype=int)print(ZERO)
●1が10個埋まった配列を作る
xxxxxxxxxxONE = np.ones(10)ONE
P376 ●すべてが整数1の2行3列の配列を作る
xxxxxxxxxxONE = np.ones((2, 3), dtype=int)ONE
●要素を3回ずつ繰り返した配列を作る
xxxxxxxxxximport numpy as npdata = np.array([1, 2, 3])data.repeat(3)
●各行の値が同じ配列を作る
xxxxxxxxxximport numpy as npdata = np.array([1, 2, 3])data.repeat(3).reshape(3, 3)
●繰り返す方向を指定した例
xxxxxxxxxximport numpy as npdata = np.arange(6).reshape(2, 3)print(data)print(data.repeat(2, axis=0)) # 行を2回繰り返すprint(data.repeat(2, axis=1)) # 列を2回繰り返す
P377
● 乱数の配列を散布図で表示する
xxxxxxxxxximport matplotlib.pyplot as pltimport numpy as npX = np.random.rand(100) # 乱数の配列を作るY = np.random.rand(100) # 乱数の配列を作るplt.scatter(X, Y) # グラフを描くplt.show() # 表示する
●正規分布の乱数
xxxxxxxxxxsigma = 2.5 # 分散mu = 50 # 平均data = sigma * np.random.randn(2, 3) + mudata
P378
●二項分布の乱数
xxxxxxxxxxnp.random.binomial(n=100, p=0.1, size=(2, 3))
●ポアソン分布の乱数
xxxxxxxxxxprint(np.random.poisson(lam=10, size=(10)))
●ポアソン分布をヒストグラフで表示する
xxxxxxxxxximport numpy as npimport matplotlib.pyplot as pltdata = np.random.poisson(lam=50, size=1000)count, bins_edges, patches = plt.hist(data, bins = 50) # ヒストグラムplt.grid()plt.show()
P379
●同じランダムシードで同じ乱数を作る
xxxxxxxxxximport numpy as npprint(np.random.seed(10)) # ランダムシードを設定するprint(np.random.randn(3)) # 乱数を発生print(np.random.seed(10)) # 同じランダムシードを設定するnp.random.randn(3) # 同じ乱数が作られる
●配列の要素の並びをシャッフルする
xxxxxxxxxximport numpy as npdata = np.arange(9).reshape(3, 3)np.random.shuffle(data)data
P380
●data.csvを読み込んで配列を作る
xxxxxxxxxximport numpy as npdata = np.loadtxt("data.csv", delimiter=",", skiprows=1)data
●pandasモジュールを使ってCSVファイルを読み込む
xxxxxxxxxximport pandas as pddf = pd.read_csv("data.csv") # CSVファイルを読み込むheader = df.columns.valuesdata = df.valuesprint(header)print(data)
xxxxxxxxxx読み込むCSVファイルのデータ data.csv を同じディレクトリ内に作って上のプログラムを実行してください。A,B,C,D10,8,12,139,6,3,8,810,41,26