はじめに
数値計算ライブラリのNumPyには色々な機能がありますが、今回は配列の操作を取り上げてみました。「配列」と言っても正確にはndarray(多次元配列)ですがこの記事の中では「配列」と表記します。
配列の作成 その1
array()関数はリストやタプルから配列を生成します。
import numpy as np
a = np.array([1, 7, 3, 2])
print(a)
実行結果
[1 7 3 2]
配列の作成 その2
配列はarange()関数を使って作成することもできます。arange(開始位置,終了位置,公差)のように指定します。引数を1つだけ渡すと、その数値が終了位置となり,0を開始位置とし公差1の配列が作成されます。
import numpy as np
a = np.arange(6)
print(a)
実行結果
[0 1 2 3 4 5]
指定の要素数で等差数列を作成する
linspace()関数を使うと、要素数を指定して等差数列を作成できます。引数に、開始位置、終了位置、要素数(デフォルトは50)を指定します。終了位置の値は作成する配列に含まれるので注意が必要です。例えば、0から1までの区間を5等分した数列が欲しい場合、次のように記述します。
import numpy as np
a = np.linspace(0, 1, 5)
print(a)
実行結果
[0. 0.25 0.5 0.75 1. ]
要素をすべて0で埋める配列を作成
zeros()関数を使うとが要素がすべて0の配列を作成できます。
import numpy as np
a = np.zeros(5)
print(a)
実行結果
[0. 0. 0. 0. 0.]
配列の結合
concatenate()関数は、複数の配列を結合します。デフォルトでは実行結果のように行方向に結合されます。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6])
b = np.array([7, 8, 9], [3, 3, 3])
c = np.concatenate([a, b])
print(c)
実行結果
[[1 2 3]
[4 5 6]
[7 8 9]
[3 3 3]]
列方向に結合するには引数axisに1を指定します。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [3, 3, 3]])
c = np.concatenate([a, b], axis=1)
print(c)
実行結果
[[1 2 3 7 8 9]
[4 5 6 3 3 3]]
配列の形状変換
配列を形状変換するにはNumPyのreshape()関数を使います。reshape()関数の第一引数には変換したい配列を指定し、第二引数に変換後の形状をタプルまたはリストで指定します。reshape()は元になる配列情報を参照して配列を参照しています。どちらかの配列内の要素の値が変わると互いに影響しあうので注意が必要です。
import numpy as np
# 一次元配列を生成
a = np.arange(12) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
# 3 x 4の二次元配列に変形
b = np.reshape(a, (3, 4))
b
実行結果
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
二次元配列を一次元化する
二次元配列を一次元化するには、ravel()関数またはflatten()関数を使います。flatten()はコピー渡し、ravel()は参照渡しです。コピー渡しのflatten()はメモリを新たに確保するため、ravel()よりも遅くなります。参照渡しでも問題ないのであればravel()を使うことをおススメします。
import numpy as np
# 2 x 5の二次元配列を生成
a = np.arange(10).reshape(2, 5)
# array([[0, 1, 2, 3, 4],
# [5, 6, 7, 8, 9]])
# 一次元配列に変換
print(a.ravel())
実行結果
[0 1 2 3 4 5 6 7 8 9]