NumPy

【NumPy】配列(ndarray)の作成方法

【NumPy】配列(ndarray)の作成方法 _array, zeros, ones, full, arange, random, randint, randn, normal, linspace, eye, empty_
naoki-hn

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'>

例のように、リストである dataarray 関数に渡すことで NumPy の ndarray を作成することができます。type で確認した結果で分かる通り、型は numpy.ndarray という型になります。

array 関数の公式ドキュメントはこちらを参照してください。

型が異なる場合は(可能であれば)アップキャストする

NumPy の ndarray は、Python 組み込み型のリストのように任意の型を持たせることができません。決まった型のみを持つことは ndarray が処理が速い理由の 1 つです。

以下の例のように、intfloat が混ざったリストを 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

zeros 関数の公式ドキュメントはこちらを参照してください。

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

ones 関数の公式ドキュメントはこちらを参照してください。

指定した値で埋めた配列を作成する場合(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

full 関数の公式ドキュメントはこちらを参照してください。

指定間隔の連続値で配列を作成する場合(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

arange 関数の公式ドキュメントはこちらを参照してください。

ランダムな数値で配列を作成する場合

分析の初期値など、ランダムな数値を用意するケースはよくあります。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

random 関数の公式ドキュメントはこちらを参照してください。

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

randint 関数の公式ドキュメントはこちらを参照してください。

標準正規分布に従う数値の配列を作成する場合(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

randn 関数の公式ドキュメントはこちらを参照してください。

任意の正規分布に従う数値の配列を作成する場合(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

normal 関数の公式ドキュメントはこちらを参照してください。

等間隔のデータを作成する場合(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

linspace 関数の公式ドキュメントはこちらを参照してください。

単位行列を作成する場合(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

eye 関数の公式ドキュメントはこちらを参照してください。

値が初期化されていない配列を作成する場合(empty 関数)

NumPy には、empty 関数というものが用意されています。この関数は、値が初期化されていませんが、初期化のオーバーヘッドがかからないため、zerosones よりも高速に作成できます。

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 は、実行した際のメモリの配置などにより実行結果が変わります。初期化は必要ないけれども、まずは配列を用意するというようなケースに適しています。

empty 関数の公式ドキュメントはこちらを参照してください。

まとめ

Python でデータ分析をする際によく使用される NumPy で配列(ndarray)を作成する方法を解説しました。

ndarray は、Python のリストから作成する方法や、NumPy の各種関数を使用する方法があります。この記事では、それぞれの作成方法を紹介しました。

ndarray は、NumPy を使いこなすために重要なデータ構造です。ぜひ、作成方法をしっかり理解して使いこなしてください。

ソースコード

上記で紹介しているソースコードについては GitHub にて公開しています。参考にしていただければと思います。

あわせて読みたい
【Python Tech】プログラミングガイド
【Python Tech】プログラミングガイド
ABOUT ME
ホッシー
ホッシー
システムエンジニア
はじめまして。当サイトをご覧いただきありがとうございます。 私は製造業のメーカーで、DX推進や業務システムの設計・開発・導入を担当しているシステムエンジニアです。これまでに転職も経験しており、以前は大手電機メーカーでシステム開発に携わっていました。

プログラミング言語はこれまでC、C++、JAVA等を扱ってきましたが、最近では特に機械学習等の分析でも注目されているPythonについてとても興味をもって取り組んでいます。これまでの経験をもとに、Pythonに興味を持つ方のお役に立てるような情報を発信していきたいと思います。どうぞよろしくお願いいたします。

※キャラクターデザイン:ゼイルン様
記事URLをコピーしました