動画は省略します。 他のファイルに従って実行すれば、テキストの Chapter15は同じように実行できます。
import numpy as np
は1度でいいから、先頭行にいれてください。2つめ以降のプログラム
リストからは省略されています。
================================================================
P344
●numpyモジュールにnpの別名と付けてインポートする
ximport numpy as np
●リストから配列を作る
xxxxxxxxxx
import numpy as np
a = np.array([1, 2, 3])
print(a)
●配列をprint()で出力する
xxxxxxxxxx
import numpy as np
a = np.array([1, 2, 3])
print(a)
P345 ●タプルから配列を作る
xxxxxxxxxx
import numpy as np
data = (1, 2, 3)
a = np.array(data)
print(a)
●配列オブジェクトの型を調べる
xa
type(a)
●配列の要素の型を調べる
xxxxxxxxxx
import numpy as np
a = np.array([1, 2, 3])
print(a.dtype)
●型が混在している配列は作ることができない
xxxxxxxxxx
import numpy as np
a = np.array([1, 1.5, 2]) # intとfloat
print(a)
b = np.array(["1", 1.5, 2]) # 文字列と数値
print(b)
c = np.array([True, False, 1.5]) # 論理値と数値
print(c)
P246
●要素の型を指定して配列を作る
xxxxxxxxxx
import numpy as np
a = 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)
●文字列に変換して配列を作る
xxxxxxxxxx
import numpy as np
d = 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型の配列を作る
xxxxxxxxxx
import numpy as np
a_int = np.array([0, 1, 2, 3, 4, 5])
a_float = np.array(a_int, dtype=float)
print(a_float)
P347
●多重リストから2行3列の配列を作る
xxxxxxxxxx
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
●3×3の配列を作る
xxxxxxxxxx
import numpy as np
line1 = [10, 20, 30]
line2 = [40, 50, 60]
line3 = [70, 80, 90]
a = np.array([line1, line2, line3])
print(a)
P348
●1次元配列を2行3列の配列に変換する
xxxxxxxxxx
import numpy as np
data = [1, 2, 3, 4, 5, 6]
a = np.array(data)
print(a)
a = a.reshape(2, 3)
print(a)
●1次元配列を2行3列の配列に変換する
xxxxxxxxxx
import numpy as np
data = [1, 2, 3, 4, 5, 6]
a = np.array(data).reshape(2, 3)
print(a)
●多次元配列を1次元配列にする
xxxxxxxxxx
import numpy as np
a = np.array([[0,1], [2,3], [4,5]])
a.ravel()
print(a.ravel())
a.flatten()
print(a.flatten())
P349
●配列の構造を調べる
xxxxxxxxxx
import numpy as np
a = np.array([[0,1], [2,3], [4,5]])
print(a)
print(a.shape)
print(a.ndim)
●配列の要素の個数
ximport numpy as np
a = np.array([[0,1], [2,3], [4,5]])
a.size
print(a.size)
P350
●配列に要素を追加する
ximport numpy as np
a = np.array([0, 1, 2])
b = np.append(a, 3) # 3を追加する
print(a)
print(b)
●配列に同時に複数の値を追加する
ximport numpy as np
a = np.array([0, 1, 2])
b = np.append(a, [3, 4, 5]) # 同時に3個の値を追加する
print(b)
●2×3の配列に行を追加する
xxxxxxxxxx
import numpy as np
a = 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
●配列に要素を挿入する
xxxxxxxxxx
import numpy as np
a = np.array([0, 1, 2])
b = np.insert(a, 1, 99)
print(b)
●配列にリストの要素を挿入する
xxxxxxxxxx
import numpy as np
b = np.insert(a, 1, [88, 99])
print(b)
●文字列を挿入すると最長の文字列に合わせた長さで切れる
xxxxxxxxxx
import numpy as np
words = np.array(["dog", "cat", "bird"])
new_words = np.insert(words, 0, "snake")
print(new_words)
●最後の要素を削除した配列を作る
xxxxxxxxxx
import numpy as np
words = np.array(["dog", "cat", "bird"])
new_words = np.delete(words, len(words)-1)
print(new_words)
P352
●配列の行と列の要素を入れ替える
xxxxxxxxxx
import numpy as np
a = np.array([[0,1], [2,3], [4,5]])
print(a)
np.transpose(a) # transpose()で転置する
a.T # Tで転置する
print(a)
●1×5の配列を5×1の配列にする
xxxxxxxxxx
import numpy as np
print(a.T) ## これは 間違ったかも 森本
a = np.array([0, 1, 2, 3, 4])
b = a[:, np.newaxis]
print(b)
●配列をリストに変換する
xxxxxxxxxx
import numpy as np
a = 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番目、最後の要素を調べる
xxxxxxxxxx
import numpy as np
a = np.array([10, 20, 30, 40, 50])
print(a[0])
print(a[1])
print(a[-1])
●配列の3番目の値を99に変更する
xxxxxxxxxx
import numpy as np
a
print(a)
a[2] = 99
a
print(a)
P354
●3行3列の配列の要素にアクセスする
xxxxxxxxxx
import numpy as np
data = [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を作る
xxxxxxxxxx
import numpy as np
a = np.array([10, 20, 30, 40])
b = a.reshape(2, 2)
print(a)
print(b)
P355
●reshape()で作った配列bを変更すると元の配列aも変更される a is b # 同じオブジェクトではない
xxxxxxxxxx
import numpy as np
b[0,0] = 99 # 配列bの要素を99に書き替える
print('b= ',b)
a # 配列aの要素も99に書き替わってしまった
xxxxxxxxxx
print('a= ',b)
●配列をスライスする
xxxxxxxxxx
import numpy as np
data = 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~6
print('data[::2]=',data[::2]) # 先頭から1個飛び
●要素を逆順にした配列を作る
xxxxxxxxxx
data[::-1] # 末尾から1個ずつ取り出す
P356
●多次元配列のスライス
xxxxxxxxxx
import numpy as np
data = [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:])
●スライスと同時に型変換する
xxxxxxxxxx
import numpy as np
data = [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
●配列の要素を順に取り出す
xxxxxxxxxx
import numpy as np
data = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
print(data)
for item in data:
print(item)
●enumerate()を使って要素を順に取り出す
xxxxxxxxxx
import numpy as np
words = ["flower", "bird", "wind", "moon"]
for i, item in enumerate(words, 1):
print(i, item)
●多次元配列の要素を順に取り出す
xxxxxxxxxx
import numpy as np
data = 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以上の値を抽出する
xxxxxxxxxx
import numpy as np
a = 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])
●偶数、奇数を分ける
xxxxxxxxxx
print('偶数=',a[a%2 == 0]) # 偶数
print('奇数=',a[a%2 == 1]) # 奇数
●多次元配列から5より大きな値を抽出する
xxxxxxxxxx
b = a.reshape(4, 4) # 4×4の配列にする
print(b)
print(b[b>5])
P359
●5以上の奇数
xxxxxxxxxx
import numpy as np
a = 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の倍数
xxxxxxxxxx
b = a[(a%2 == 0) | (a%3 == 0)]
print(b)
●3の倍数ではない値
xxxxxxxxxx
b=a[~(a%3==0)]
print(b)
●偶数は0、奇数は1に置き換える
xxxxxxxxxx
import numpy as np
a = 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()メソッドで配列を昇順にソートする
xxxxxxxxxx
import numpy as np
a = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3])
a.sort()
a
●sort()関数でリストからソート済みの配列を作る
xxxxxxxxxx
import numpy as np
a = np.sort([4, 6, 3, 9, 1, 2, 5])
a
●降順にソート済みの配列を作る
xxxxxxxxxx
import numpy as np
a = 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を足す
xxxxxxxxxx
import numpy as np
A = np.array([10, 20, 30, 40]).reshape(2, 2)
print(A)
B = A + 5
print(B)
●配列に対して引き算、掛け算、割り算を行う
xxxxxxxxxx
print(A)
print(A - 5)
print(A * 2)
print(A / 2)
P362
●ベクトルaを行列Aで表す
xxxxxxxxxx
import numpy as np
p0 = np.array((1, 1))
p1 = np.array((6, 4))
A = p1 - p0
print(A)
●ベクトルaの長さ
xxxxxxxxxx
import numpy as np
a_norm = np.linalg.norm(A)
print(a_norm)
●ベクトルaの2倍の長さのベクトル
xxxxxxxxxx
import numpy as np
A2 = A*2
print(A2)
a2_norm = np.linalg.norm(A*2)
print(a2_norm)
P363
●配列の要素を合計する
xxxxxxxxxx
import numpy as np
A = 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))
●配列の最大値、最小値を求める
xxxxxxxxxx
print(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の関数を使う場合の書き方
xxxxxxxxxx
import numpy as np
print(np.sum(A)) # Aの合計値
print(np.max(A,1)) # Aの各行の最大値
P364
import numpy as np sigma = 3.5 # 分散 mu = 65 # 平均
● 得点は乱数で
xxxxxxxxxx
import numpy as np
data = sigma * np.random.randn(200) + mu
msg = "得点は?:".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より大きい要素が入っている位置を調べる
xxxxxxxxxx
import numpy as np
A = np.array([4, 6, 3, 1, 7, 3])
B = (A>5) # 5より大きい要素が入っている位置をTrueにする
print(B)
P365
●同じ行列数の配列の足し算
xxxxxxxxxx
import numpy as np
A = 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)
●同じ行列数の配列の掛け算、割り算
xxxxxxxxxx
D = A * B
E = A / B
print(D)
print(E)
P366
●ベクトルaとbを足したベクトルcを求める
xxxxxxxxxx
import numpy as np
A = np.array([5, 3])
B = np.array([4, -2])
C = A + B
print(C)
●ベクトルaからbを引いたベクトルcを求める
xxxxxxxxxx
C = A - B
print(C)
P367
●行数が足りない配列を足す
xxxxxxxxxx
import numpy as np
A = np.array([1, 2, 3, 4]).reshape(2, 2)
print(A)
B = np.array([100, 200])
print(B)
C = A + B # 行数が足りない配列を足す
print(C)
●列数が足りない配列を足す
xxxxxxxxxx
import numpy as np
A = 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
●行列の内積
xxxxxxxxxx
import numpy as np
A = np.array([[1, 2],[3, 4]])
B = np.array([[5, 6],[7, 8]])
C = np.dot(A, B)
print(C)
P369
●仕事を内積dot()で計算する
xxxxxxxxxx
import numpy as np
F = np.array([8.66, 5.0]) # ベクトルF
S = np.array([20, 0]) # ベクトルS
W = np.dot(F, S) # 仕事(内積)を求める
print(W)
●dot()の結果を検算する
xxxxxxxxxx
import numpy as np
f = 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を求める
xxxxxxxxxx
import numpy as np
a = np.array([1, 2, 0])
b = np.array([0, 1, -1])
c = np.cross(a, b) # 外積
print(c)
●math.sin()とnumpy.sin()の違い
xxxxxxxxxx
import numpy as np
import math
import numpy as np
data = [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グラフを描く
xxxxxxxxxx
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 180)
Y = np.sin(X)
plt.plot(X, Y) # グラフを作図する
plt.show()
--------------------------- 以下 15-4 ---------------- P372
●0~9の配列を作る
xxxxxxxxxx
import numpy as np
print(np.arange(10))
●n×mの配列を作る
xxxxxxxxxx
n = 3 # n行
m = 4 # m列
print(np.arange(n*m).reshape(n, m))
●10以上、20未満の偶数の配列
xxxxxxxxxx
print(np.arange(10, 20, 2))
P373
●行列A、Bの要素が同じかどうかを比較する
xxxxxxxxxx
import numpy as np
A = 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を比較して要素が異なる個数を数える
xxxxxxxxxx
import numpy as np
A = 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刻みのステップを指定する
xxxxxxxxxx
np.arange(10, step = 0.5)
P374
●0~120を16分割した配列を作る
xxxxxxxxxx
np.linspace(0, 120, 16)
●値がint型で3行2列の行列を作る
xxxxxxxxxx
ZERO = np.empty((3,4), dtype=None)
print(ZERO)
P375
●4行4列の単位行列を作る
xxxxxxxxxx
E = np.identity(4)
print(E)
●eye()を使って単位行列を作る
xxxxxxxxxx
E = np.eye(3)
print(E)
●整数値の単位行列を作る
xxxxxxxxxx
E = np.identity(3, dtype=int)
print(E)
●0が10個埋まった配列を作る
xxxxxxxxxx
ZERO = np.zeros(9, dtype=int)
print(ZERO)
●1が10個埋まった配列を作る
xxxxxxxxxx
ONE = np.ones(10)
ONE
P376 ●すべてが整数1の2行3列の配列を作る
xxxxxxxxxx
ONE = np.ones((2, 3), dtype=int)
ONE
●要素を3回ずつ繰り返した配列を作る
xxxxxxxxxx
import numpy as np
data = np.array([1, 2, 3])
data.repeat(3)
●各行の値が同じ配列を作る
xxxxxxxxxx
import numpy as np
data = np.array([1, 2, 3])
data.repeat(3).reshape(3, 3)
●繰り返す方向を指定した例
xxxxxxxxxx
import numpy as np
data = np.arange(6).reshape(2, 3)
print(data)
print(data.repeat(2, axis=0)) # 行を2回繰り返す
print(data.repeat(2, axis=1)) # 列を2回繰り返す
P377
● 乱数の配列を散布図で表示する
xxxxxxxxxx
import matplotlib.pyplot as plt
import numpy as np
X = np.random.rand(100) # 乱数の配列を作る
Y = np.random.rand(100) # 乱数の配列を作る
plt.scatter(X, Y) # グラフを描く
plt.show() # 表示する
●正規分布の乱数
xxxxxxxxxx
sigma = 2.5 # 分散
mu = 50 # 平均
data = sigma * np.random.randn(2, 3) + mu
data
P378
●二項分布の乱数
xxxxxxxxxx
np.random.binomial(n=100, p=0.1, size=(2, 3))
●ポアソン分布の乱数
xxxxxxxxxx
print(np.random.poisson(lam=10, size=(10)))
●ポアソン分布をヒストグラフで表示する
xxxxxxxxxx
import numpy as np
import matplotlib.pyplot as plt
data = np.random.poisson(lam=50, size=1000)
count, bins_edges, patches = plt.hist(data, bins = 50) # ヒストグラム
plt.grid()
plt.show()
P379
●同じランダムシードで同じ乱数を作る
xxxxxxxxxx
import numpy as np
print(np.random.seed(10)) # ランダムシードを設定する
print(np.random.randn(3)) # 乱数を発生
print(np.random.seed(10)) # 同じランダムシードを設定する
np.random.randn(3) # 同じ乱数が作られる
●配列の要素の並びをシャッフルする
xxxxxxxxxx
import numpy as np
data = np.arange(9).reshape(3, 3)
np.random.shuffle(data)
data
P380
●data.csvを読み込んで配列を作る
xxxxxxxxxx
import numpy as np
data = np.loadtxt("data.csv", delimiter=",", skiprows=1)
data
●pandasモジュールを使ってCSVファイルを読み込む
xxxxxxxxxx
import pandas as pd
df = pd.read_csv("data.csv") # CSVファイルを読み込む
header = df.columns.values
data = df.values
print(header)
print(data)
xxxxxxxxxx
読み込むCSVファイルのデータ data.csv を同じディレクトリ内に作って
上のプログラムを実行してください。
A,B,C,D
10,8,12,13
9,6,3,8,8
10,41,26