こんにちは、データサイエンティストのたぬ(@tanuhack)です!
Pythonで数値計算(主にN次元配列の計算)を行うための標準的なモジュールである『NumPy』を使っている人は、多いのではないでしょうか。
というか、処理スピードのことを考えると使わざるをえませんよね。(使わないと計算速度が遅すぎてイライラしそう)
そこで今回は、データサイエンスの一番基礎であるNumPyの『ndarray型(n-dimensional array)』の配列を新規作成する方法を自分への備忘録を兼ねて紹介します!
以下、紹介するNumPyはimport numpy as np
でインポートしたものとして進めていきますね。
目次
Pythonリストから作成する
まず、1つの方法として、np.array
を使ったPythonリストからndarray
を作成することが出来ます。
np.array([1, 2, 3, 4, 5])
# array([1, 2, 3, 4, 5])
np.array(list(range(1,6)))
# array([1, 2, 3, 4, 5])
ただ、Pythonリストとは異なり、NumPy配列の要素はすべて同じ型でなけれないけません。型が一致しない場合、可能であればNumPyはアップキャストします。
np.array([1, 2, 3.14, 4, 5])
# array([1. , 2. , 3.14, 4. , 5. ])
[aside]補足ここでは、整数は浮動小数点にアップキャストされる[/aside]
多次元配列を作成する
Pythonリストとは異なり、リストのリストを使用してNumPy配列は多次元にすることが可能です。
np.array([[1,2,3],[4,5,6],[7,8,9]])
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
np.array([range(i,i+3) for i in [1,4,7]])
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
内側のリストは、2次元配列の『行』として扱われます。
これで、基本的なndarray
の作り方はおしまいです。次は、NumPyの強力な組み込み関数を使った配列の作成方法を見ていきましょう。
NumPyの組み込み関数を使う
NumPyにはndarray
配列を作成する際、非常に便利な組み込み関数が用意されています。
慣れるまで写経してしっかりと見に付けましょう。
np.arrange
Pythonの組み込みのrange
関数と同じ動作でndarray
を作成することが出来ます。
np.arange(10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(0,20,2)
# array([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
np.arange(1,10).reshape((3,3))
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
3つ目の例のように、.reshape
で2次元配列へと変形することも出来ます。
np.zeros
要素が全て0の配列を作成します。
np.zeros(10)
# array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros(10, dtype='int')
# array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
引数が数字だけだと、デフォルトで浮動小数整数を返しますが、dtype='int'
で整数に変換もできます。
np.ones
今度は、要素が全て1の配列を作成します。
np.ones((2,3))
# array([[1., 1., 1.],
# [1., 1., 1.]])
np.ones((2,3), dtype='int')
# array([[1, 1, 1],
# [1, 1, 1]])
zeros
同様に引数が数字だけだと、デフォルトで浮動小数整数を返しますが、dtype='int'
で整数に変換もできます。
np.full
要素が全て、任意の値であるx行y列の配列を作成します。
np.full((3,4),3.14)
# array([[3.14, 3.14, 3.14, 3.14],
# [3.14, 3.14, 3.14, 3.14],
# [3.14, 3.14, 3.14, 3.14]])
要素が全て3.14の3行4列のndarray
配列が作成されていますね。
np.linspace
ある値からある値をある値で均等に配置された配列を作成します。すみません、なに言ってるか分かりませんね、笑。実際に見てみましょう。
np.linspace(1, 10, 6)
# array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. ])
1と10の間に均等に配置された6つのndarray
配列が作成されていますね。
np.random
乱数を用いたndarray
配列を作成する場合はnp.random
を使用します。
# 0から1の範囲でランダムな値の3行3列の配列を作成
np.random.random((3,3))
# array([[0.62514841, 0.36936491, 0.00121771],
# [0.26681038, 0.02498829, 0.23434787],
# [0.1148208 , 0.72950429, 0.74966784]])
# 0から10の範囲でランダムな整数値で3行3列の配列を作成
np.random.randint(1,10,(3,3))
# array([[3, 7, 9],
# [9, 1, 6],
# [8, 5, 6]])
0から1までの乱数を使って何かをしたいときは、np.random.random
。
任意の値の間で整数の乱数を使って何かをしたいときは、np.random.randint
で使い分けると良いです。
np.eye
np.eye
は単位行列を作成したい場合に使います。
np.eye(3)
# array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
引数に任意の自然数nをいれることで、n行n列の単位行列を作ることが出来ます。
さいごに
今回は、NumPyの基礎中の基礎であるndarray
配列を、色々な方法を使って作成する方法をつらつらと紹介しました。
少しでもお役に立てれると嬉しいです。
NumPyで高速に動くプログラムを作成して、データサイエンス力をあげよう!
それでは