【NumPy】配列(ndarray)の作成方法
の作成方法-_array-zeros-ones-full-arange-random-randint-randn-normal-linspace-eye-empty_.jpg)
Python でデータ分析をする際によく使用される NumPy で配列(ndarray)を作成する方法を解説します。
NumPy の配列(ndarray)の作成
NumPy は、Python で高速に数値計算を行うためのライブラリです。科学技術計算やデータ分析、機械学習で非常によく使用されています。
NumPy での処理の中心となる多次元配列のデータ型のことを ndarray と言います。この ndarray は、同じ型の数値データを効率よくまとめて扱うことができます。
データ分析を始めるには ndarray を準備する必要がありますが、Python のリストから作成する方法や、各種 NumPy の関数を使用して作成する方法があります。
この記事では、NumPy の 配列(ndarray)を作成する各種方法について紹介します。
Python 組み込み型の list から作成する方法
一般的な作成方法(array 関数)
NumPy で配列(ndarray)を作成する一番簡単な方法は、Python 組み込み型の list から array 関数を用いて作成する方法です。
import numpy as np data = [1, 2, 3, 4, 5] data_array = np.array(data) print(data_array) print(type(data_array))
【実行結果】 [1 2 3 4 5] <class 'numpy.ndarray'>
例のように、リストである data を array 関数に渡すことで NumPy の ndarray を作成することができます。type で確認した結果で分かる通り、型は numpy.ndarray という型になります。
型が異なる場合は(可能であれば)アップキャストする
NumPy の ndarray は、Python 組み込み型のリストのように任意の型を持たせることができません。決まった型のみを持つことは ndarray が処理が速い理由の 1 つです。
以下の例のように、int と float が混ざったリストを array 関数に渡した場合、NumPy は可能であればアップキャストし、float にして ndarray を作成します。
import numpy as np data = [1.23, 2, 3, 4, 5] data_array = np.array(data) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [1.23 2. 3. 4. 5. ] <class 'numpy.ndarray'> float64
実行結果を確認すると、もともと int であった「2」は「2.」のようになっており、具体的に型を確認してみると float64 となっていることが分かります。
型を明示的に指定したい場合
型を明示的に指定したい場合は、dtype 引数に型を設定することで指定した型で ndarray を作成することができます。
import numpy as np data = [1, 2, 3, 4, 5] data_array = np.array(data, dtype=np.double) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [1. 2. 3. 4. 5.] <class 'numpy.ndarray'> float64
例では、float64 を表す np.double を指定して作成していますが、他の型ももちろん指定できます。また、ndarray の型を確認したい場合は、dtype 属性で確認できます。
多次元配列を作成する場合
多次元配列を作成したい場合は、入れ子構造のリストを array 関数に渡します。
import numpy as np data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] data_array = np.array(data) print(data_array) print(type(data_array)) print(data_array.shape) print(data_array.dtype)
【実行結果】 [[1 2 3] [4 5 6] [7 8 9]] <class 'numpy.ndarray'> (3, 3) int32
例では、3 × 3 の配列を作成しています。ndarray の形状を確認する場合は、shape 属性で確認できます。
NumPy の関数を使用して作成する方法
NumPy には、ndarray を作成するための各種関数が用意されています。代表的な作成のための関数について紹介します。
0 埋めの配列を作成する場合(zeros 関数)
0 埋めの配列を作成するには、zeros 関数を使用します。
import numpy as np data_array = np.zeros(10) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] <class 'numpy.ndarray'> float64
1 埋めの配列を作成する場合(ones 関数)
1 埋めの配列を作成するには、ones 関数を使用します。
import numpy as np data_array = np.ones(10) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] <class 'numpy.ndarray'> float64
指定した値で埋めた配列を作成する場合(full 関数)
指定した値で埋めた配列を作成するには、full 関数を使用します。
import numpy as np data_array = np.full((3, 3), 1.5) print(data_array) print(type(data_array)) print(data_array.dtype)
[[1.5 1.5 1.5] [1.5 1.5 1.5] [1.5 1.5 1.5]] <class 'numpy.ndarray'> float64
指定間隔の連続値で配列を作成する場合(arange 関数)
Python 組み込み関数の range をよく使うかと思いますが、NumPy にも同様の arange という関数が用意されています。arange である点に注意してください。
使い方は range 関数と同様で、開始、終了、ステップを指定します。終了の数値は含まないことに注意してください。
import numpy as np data_array = np.arange(0, 10, 2) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [0 2 4 6 8] <class 'numpy.ndarray'> int32
ランダムな数値で配列を作成する場合
分析の初期値など、ランダムな数値を用意するケースはよくあります。NumPy でランダムな数値を生成する方法について、いくつかの関数を見ていきましょう。
0 ~ 1 のランダムな配列を作成する場合 (random 関数)
0 ~ 1 のランダムな配列を作成するには、random 関数を使用します。
import numpy as np data_array = np.random.random((3, 3)) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [[0.30068121 0.34934379 0.25923243] [0.06904324 0.02935395 0.56785741] [0.72615491 0.75143937 0.3390085 ]] <class 'numpy.ndarray'> float64
int のランダムな数値の配列を作成する場合(randint 関数)
int のランダムな数値配列を作成する場合には、randint 関数を使用します。randint 関数では、最小値、最大値、配列の形状を指定します。
import numpy as np data_array = np.random.randint(0, 20, (3, 3)) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [[10 16 15] [10 14 16] [12 0 8]] <class 'numpy.ndarray'> int32
標準正規分布に従う数値の配列を作成する場合(randn 関数)
標準正規分布(平均 0、標準偏差 1)に従うデータ配列を作成するには、randn 関数を使用します。
import numpy as np data_array = np.random.randn(10) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [ 0.06963259 -1.65648444 0.65346528 -0.80301814 0.37937227 -0.34091399 0.90080966 1.63180066 1.02879147 0.60091374] <class 'numpy.ndarray'> float64
任意の正規分布に従う数値の配列を作成する場合(normal 関数)
任意の正規分布に従うデータ配列を作成するには、normal 関数を使用します。normal 関数では、平均、標準偏差、配列の形状を指定します。
import numpy as np data_array = np.random.normal(1, 5, (3, 3)) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [[-1.62300862 -6.10085984 2.3361214 ] [ 0.01017804 9.93436437 1.56993599] [ 5.3599857 7.59139232 0.05871388]] <class 'numpy.ndarray'> float64
等間隔のデータを作成する場合(linspace関数)
グラフの描画の際の軸として、等間隔なデータを作成したくなる場合があります。このような場合には、linspace 関数を使用します。linspace 関数では、最小値、最大値、データ点数を指定します。
import numpy as np data_array = np.linspace(0, 1, 5) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [0. 0.25 0.5 0.75 1. ] <class 'numpy.ndarray'> float64
単位行列を作成する場合(eye関数)
単位行列(対角に 1 が並ぶ配列)は、配列計算でよく使用します。単位行列を作成するには、eye 関数を使用します。
import numpy as np data_array = np.eye(3) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] <class 'numpy.ndarray'> float64
値が初期化されていない配列を作成する場合(empty 関数)
NumPy には、empty 関数というものが用意されています。この関数は、値が初期化されていませんが、初期化のオーバーヘッドがかからないため、zeros や ones よりも高速に作成できます。
import numpy as np data_array = np.empty(10) print(data_array) print(type(data_array)) print(data_array.dtype)
【実行結果】 [ 0.06963259 -1.65648444 0.65346528 -0.80301814 0.37937227 -0.34091399 0.90080966 1.63180066 1.02879147 0.60091374] <class 'numpy.ndarray'> float64
empty は、実行した際のメモリの配置などにより実行結果が変わります。初期化は必要ないけれども、まずは配列を用意するというようなケースに適しています。
まとめ
Python でデータ分析をする際によく使用される NumPy で配列(ndarray)を作成する方法を解説しました。
ndarray は、Python のリストから作成する方法や、NumPy の各種関数を使用する方法があります。この記事では、それぞれの作成方法を紹介しました。
ndarray は、NumPy を使いこなすために重要なデータ構造です。ぜひ、作成方法をしっかり理解して使いこなしてください。
上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。





の分割方法-_-split-vsplit-hsplit-_.jpg)
をソートする方法-_-sort-argsort-_-1.jpg)
を用いた配列(ndarray)の計算.jpg)