【NumPy入門】配列の生成方法(1次元、2次元、高速化など)

PythonモジュールNumPyにおける配列の生成方法についてまとめました。

【1次元配列】numpy.array

numpy.arrayメソッドで1次元配列を宣言・初期化できます。

# -*- coding: utf-8 -*-
import numpy as np

x = np.array([1, 0, 1])

print(x) # [1 0 1]

1次元配列はベクトルの生成や計算に使うことが出来ます。

関連記事
詳細 【NumPy】1次元配列の生成(numpy.array)

【2次元配列】numpy.array

numpy.arrayメソッドで2次元配列を宣言・初期化できます。

# -*- coding: utf-8 -*-
import numpy as np

A = np.array([[1, 2],
              [3, 4],
              [5, 6]])

print(A)        # [[1 2]
                # [3 4]
                # [5 6]]

関連記事
詳細 【NumPy】2次元配列の生成(numpy.array)

【等差数列】numpy.linspace、numpy.arrange

numpy.linspace(a, b, n)メソッドでa以上b以下で個数nの等差数列(配列)を作成ができます。

# -*- coding: utf-8 -*-
import numpy as np

x = np.linspace(1, 2, 5)

print(x) # [ 1.    1.25  1.5   1.75  2.  ]
関連記事
詳細 【NumPy】等差数列の生成(numpy.linspace)

numpy.arrange(a, b, d)メソッドでa以上b未満で間隔dの等差数列を作ることができます。

# -*- coding: utf-8 -*-
import numpy as np

x = np.arange(1, 5, 2)

print(x) # [1 3]

【配列を高速生成】numpy.empty

numpy.emptyで配列を高速に生成できます。
(領域確保だけ行い要素の値の初期化は行いません)

# -*- coding: utf-8 -*-
import numpy as np

A = np.empty([2, 3])

print(A)  # [[  1.89122294e+219   3.44999157e-085   4.44748472e+252]
 [  3.65284547e+233   3.94153470e+180   5.43239533e-311]]
関連記事
詳細 【NumPy】配列を高速に生成 (numpy.empty)

【要素が全て1の配列】numpy.ones(m, n)

numpy.ones(m, n)メソッドでm×n(行数m、列数n)の要素が全て1の配列を作成できます。

# -*- coding: utf-8 -*-
import numpy as np

# 配列の宣言・初期化
X = np.ones((2, 3))

# 画面出力
print(X)

'''
[[ 1.  1.  1.]
 [ 1.  1.  1.]]
'''
関連記事
詳細 【NumPy】要素が全て1の配列生成 (numpy.ones)

【全ての要素が同じ配列】numpy.zeros_like、numpy.ones_like

NumPy配列では、特定の配列と同じサイズで全ての要素が「0」や「1」の配列を生成する機能が用意されています。

書式

説明
X = numpy.zeros_like(A) 配列Aと同じサイズで全ての要素が0の配列Xを生成します。
X = numpy.ones_like(A) 配列Aと同じサイズで全ての要素が1の配列Xを生成します。
# -*- coding: utf-8 -*-
import numpy as np

# 配列の宣言・初期化
X = np.array([[1, 2, 3],[4, 5, 6]])

# 結果表示
print(np.zeros_like(X))
"""
[[0 0 0]
 [0 0 0]]
"""

print(np.ones_like(X))

"""
[[1 1 1]
 [1 1 1]]
"""
関連記事
詳細 【NumPy】1つの配列と同じサイズで全ての要素が「0」「1」の配列を生成

また、numpy.zero(m, n)メソッドでm×n(行数m、列数n)の要素が全て0の配列を作成できます。

# -*- coding: utf-8 -*-
import numpy as np

# 配列の宣言・初期化
X = np.zeros((2, 3))

# 画面出力
print(X)

"""
[[ 0.  0.  0.]
 [ 0.  0.  0.]]
"""
関連記事
詳細 【NumPy】要素が全て0の配列生成 (numpy.zeros)

【単位行列の配列】生成

numpy.eye(m)メソッドでm×mの単位行列(配列)を作成できます。

# -*- coding: utf-8 -*-
import numpy as np

# 配列の宣言・初期化
X = np.eye(3)

# 画面出力
print(X)

"""
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]
"""
関連記事
詳細 【NumPy】単位行列の配列生成 (numpy.eye)

【三角行列の配列】numpy.tri

numpy.triで三角行列を生成できます。

# -*- coding: utf-8 -*-
import numpy as np

A = np.tri(4)

print(A)

"""
[[ 1.  0.  0.  0.]
 [ 1.  1.  0.  0.]
 [ 1.  1.  1.  0.]
 [ 1.  1.  1.  1.]]
"""
関連記事
詳細 【NumPy】三角行列を生成 (numpy.tri)

【同じ要素を繰り返した配列】numpy.repeat

numpy.repeatメソッドで同じ要素を繰り返して配列を作成できます。

# -*- coding: utf-8 -*-
import numpy as np

# 配列の宣言・初期化
A = np.repeat([1, 2, 3, 4], 3)
B = np.array([1, 2, 3, 4]*3)

# 画面出力
print(A) # [1 1 1 2 2 2 3 3 3 4 4 4]
print(B) # [1 2 3 4 1 2 3 4 1 2 3 4]

関連記事
詳細 【NumPy】同じ要素を繰り返して配列生成 (numpy.repeat)

【格子状配列】numpy.meshgrid

numpy.meshgridで格子状配列を生成できます。

# -*- coding: utf-8 -*-
import numpy as np

x = np.array([1,2,3])
y = np.array([4,5,6,7])

xx, yy = np.meshgrid(x, y)

print(xx)
"""
[[1 2 3]
 [1 2 3]
 [1 2 3]
 [1 2 3]]
"""

print(yy)
"""
[[4 4 4]
 [5 5 5]
 [6 6 6]
 [7 7 7]]
"""

これは

xx = np.repeat(x, (len(y))
yy = np.repeat(y, (len(x)).T

と同じ効果です。

関連記事
詳細 【NumPy】格子状配列の生成 (numpy.meshgrid)

【対数スケールの配列】numpy.logspace

numpy.logspaceで対数スケールの配列を生成できます。

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)[source]

パラメータ|概要
start|生成される配列の最初の値。
stop|f生成される値の最期の値。endpointにFalseが設定されている場合はこの値を含まなくなります。
num|生成する配列(ndarray)の要素数(デフォルト50で省略可能)
endpoint|Trueの場合、stopが最後の値となる。Falseの場合、stopの値が配列に含まれない。(デフォルトTrueで省略可能)
base|基数(底)(デフォルト10.0で省略可能)
dtype|出力配列の型(デフォルトfloat64で省略可能)

# -*- coding: utf-8 -*-
import numpy as np

# 2^1 ~ 2^10 までを値に持つ配列を生成
x = np.logspace(1, 10, 10, base=2)

print(x) # [ 2.  4.  8.  16.  32.  64.  128.  256.  512. 1024.]
関連記事
詳細 【Python/NumPy】対数スケールの配列を生成(numpy.logspace)

【データ型を設定】dtype

Pythonの数値計算モジュールNumPyでは、配列生成時にデータ型を設定できます。
【詳細】データ型の種類一覧

# -*- coding: utf-8 -*-
import numpy as np

x = np.array([1, 0, 1], dtype='float32')

print(x) # [ 1.  0.  1.]
関連記事
詳細 【NumPy】配列生成時にデータ型を設定 dtype

【データ型の種類】一覧

NumPyの配列のデータ型は以下の種類があります。

種類 説明
bool 論理値型
inti OS依存の整数(64bitのOSならint型64ビット)
int8 8ビットの整数型
int16 16ビットの整数型
int32 32ビットの整数型
int64 64ビットの整数型
unit8 8ビット符号なし整数型(画像処理などでよく使います)
unit16 16ビット符号なし整数型
unit32 32ビット符号なし整数型
unit64 64ビット符号なし整数型
float16 16ビットの実数型
float32 32ビットの実数型
float64 64ビットの実数型
complex64 64ビットの複素数型
complex128 128ビットの複素数型

NumPyの配列は、型推定が行われますが配列生成のメソッドで引数dtypeで型を指定することもできます。
また、配列のデータ型はdtype属性で確認できます。

# -*- coding: utf-8 -*-
import numpy as np

x = np.array([1, 2, 3])
print(x.dtype) # int32

y = np.array([1., 2., 3.])
print(y.dtype) # float64

z = np.array([1, 2, 3], dtype='float64')
print(z.dtype) # float64
関連記事
詳細 【NumPy】配列生成時にデータ型を設定 dtype
関連記事
1 PythonでOpenCV入門 サンプル集
2 【Python】画像処理プログラミング入門
3 【画像処理入門】アルゴリズム&プログラミング

コメント