NumPy 色々な配列を作る①
NumPyを使った色々な配列の作り方まとめ①
リストからNumPyの配列を作る。
型はndarrayという名前だそうだ。
これは一次元配列。
次元はndim属性、各軸方向の大きさはshape属性で得られる。
import numpy as np # 一次元配列 x = np.array([1, 2, 3, 4]) x x.ndim x.shape
[1 2 3 4] 1 (4,)
これは二次元配列、いわゆる行列。
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) x x.ndim # 2行4列の行列 x.shape
[[1 2 3 4] [5 6 7 8]] 2 (2, 4)
要素の方は統一されるようになっていて、dtypeで型を指定できる。
# 整数型 np.array([1, 2, 3, 4], dtype=np.int) # 浮動小数点型 np.array([1, 2, 3, 4], dtype=np.float) # 複素数型 np.array([1, 2, 3, 4], dtype=np.complex)
[1 2 3 4] [1. 2. 3. 4.] [1.+0.j 2.+0.j 3.+0.j 4.+0.j]
要素が全て0の配列はzerosメソッドで作成
要素が全て1の配列はonesメソッドで作成
# 要素が全て0の配列はzeros関数で作成 np.zeros(2) np.zeros((3, 2)) np.ones((2, 3))
[0. 0.] [[0. 0.] [0. 0.] [0. 0.]] [[1. 1. 1.] [1. 1. 1.]]
任意の形状の配列を作成したいときにはempty。
要素の値が初期化されていないので作成にかかる時間が短い。
fillメソッドで、配列の全要素を指定の値に変更できる。
またfullメソッドでは、上の2つを合わせた、要素が一定で任意の形状の配列を作れる。
x = np.empty((2, 3)) print(x) x.fill(1.5) print(x) x = np.full((2, 3), 1.5) print(x)
[[6.23042070e-307 3.56043053e-307 1.37961641e-306] [1.37962320e-306 1.78019354e-306 7.56602523e-307]] [[1.5 1.5 1.5] [1.5 1.5 1.5]] [[1.5 1.5 1.5] [1.5 1.5 1.5]]
ある配列と同じ形状で配列を作りたければ、
ones_like, zeros_like, full_like, empty_likeメソッドを使う。
x = np.empty((2, 3)) np.ones_like(x) np.zeros_like(x) np.full_like(x, 1) np.empty_like(x)
[[1. 1. 1.] [1. 1. 1.]] [[0. 0. 0.] [0. 0. 0.]] [[1. 1. 1.] [1. 1. 1.]] [[1. 1. 1.] [1. 1. 1.]]
arrangeメソッドで、一定間隔で要素の値が変化する配列を作れる。
np.arange(4) np.arange(1, 6) np.arange(1, 6, 0.8)
[0 1 2 3] [1 2 3 4 5] [1. 1.8 2.6 3.4 4.2 5. 5.8]
同じようなことをlinspaceメソッドでもできる。
# 0から1まで5等分する。 np.linspace(0, 1, 5) # endpointをFalseにすると終了値が含まれない。 np.linspace(0, 1, 5, endpoint=False) # 対数等間隔な値の要素を持つ配列はlogspaceメソッドを使う。 # 対数の底はデフォルトでは10。 # ↓は、logx = 0 から logx = 2までのxを10等分して返している。 np.logspace(0, 2, 10) # 対数の底を変更するにはbaseの値を変更する。 # endpointも指定できる。 np.logspace(0, 2, 10, base=np.e, endpoint=False)
[0. 0.25 0.5 0.75 1. ] [0. 0.2 0.4 0.6 0.8] [ 1. 1.66810054 2.7825594 4.64158883 7.74263683 12.91549665 21.5443469 35.93813664 59.94842503 100. ] [1. 1.22140276 1.4918247 1.8221188 2.22554093 2.71828183 3.32011692 4.05519997 4.95303242 6.04964746]
単位行列はeyeメソッドで作る。
キーワード引数kで対角成分を並べる位置を指定できる。
また引数に行数と列数、kを与えると任意の形状の単位行列を作れる。
np.eye(3) # 右に1列ズレたところからスタート np.eye(3, k=1) # 左に1列ズレたところからスタート np.eye(3, k=-1) # 2,3行列の1列目からスタート np.eye(2, 3, k=1)
[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] [[0. 1. 0.] [0. 0. 1.] [0. 0. 0.]] [[0. 0. 0.] [1. 0. 0.] [0. 1. 0.]] [[0. 1. 0.] [0. 0. 1.]]