個人的神殿

プログラミング

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.]]