【保存版】NumPyでndarray型の配列を新規作成する方法まとめ

こんにちは、データサイエンティストのたぬ(@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で高速に動くプログラムを作成して、データサイエンス力をあげよう!

それでは