「Python3」NumPy(ndarrayオブジェクトを生成)

NumPy NumPy

NumPyは、Pythonプログラミング言語の拡張モジュールで、大規模な多次元配列や行列のサポート、これらを操作するための大規模な高水準の数学関数ライブラリを提供しています。

ndarrayとは?

ndarrayはNumPyの基本要素の1つで、その名前はN次元配列オブジェクト(N-dimensional array)に由来します。ndarrayはPythonにおける高速かつ大規模データ処理を提供します。

ndarray生成関数

ndarray生成関数を表にまとめます。

関数 説明
array 入力にリスト・タプルなどのデータを受けてndarrayを生成する
asarray arrayと同様にndarrayを生成する。しかし、入力がndarrayの場合は新規に変数を生成しない
arange Python組み込みのrange関数と同じ動作で、ndarrayを生成する
linspace 第1引数startに最初の値、第2引数stopに最後の値、第3引数numに要素数を指定する
それらに応じた間隔(公差)が自動的に算出し、ndarrayを生成する
ones 全ての要素が1のndarrayを生成する
ones_like 引数に別のndarrayなどのシーケンス型変数を受け、それをテンプレートとして全ての要素が1のndarrayを生成する
zeros 全ての要素が0のndarrayを生成する
zeros_like 引数に別のndarrayなどのシーケンス型変数を受け、それをテンプレートとして全ての要素が0のndarrayを生成する
empty 全ての要素が不定のndarrayを生成する
empty_like 引数に別のndarrayなどのシーケンス型変数を受け、それをテンプレートとして全ての要素が不定のndarrayを生成する
full 全ての要素が指定された値で埋められたndarrayを生成する
full_like 引数に別のndarrayなどのシーケンス型変数を受け、それをテンプレートとして全ての要素が指定された値で埋められたndarrayを生成する
identity N×Nの単位行列となるndarrayを生成する
eye N×Nの単位行列となるndarrayを生成したあとで、列(行)数を指定して切り出す

array関数

まずはarray関数を使用して、ndarrayオブジェクトを生成してみましょう。

<ソースコード>
data1 = [1, 2, 3, 4, 5]
arr1 = np.array(data1)
pprint.pprint(arr1)

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

arr3 = np.array(
    [
        [1, 2, 3, 4, 5],
        [6, 7, 8, 9, 10],
        [11, 12, 13, 14, 15]
    ],
    dtype=np.int16
)
pprint.pprint(arr3)
<出力結果>
array([1, 2, 3, 4, 5])
array([1, 2, 3, 4, 5, 6])
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15]], dtype=int16)

array関数は、引数にシーケンス型やそれに類する形式の変数を取り、そのデータを格納した新しいndarray変数を返します。

ndarrayの属性

先ほど生成したndarray変数の属性を見ていきます。ndarrayの主な属性については以下の通りとなっています。効率良く処理するためにndarrayのデータはメモリの連続領域上に保持されていますが、これらの属性を参照するとデータがメモリ上にどうレイアウトされているかを調べることができます。

<ソースコード>
# 型
print(type(arr3))
# 配列の次元数
print(arr3.ndim)
# 配列の要素数
print(arr3.size)
# 各次元の要素数
print(arr3.shape)
# 配列要素のデータ型
print(arr3.dtype)
<出力結果>
<class 'numpy.ndarray'>
2
15
(3, 5)
int32
属性 説明
ndarray.flags アレイのメモリレイアウトに関する情報
ndarray.shape 配列次元のタプル
ndarray.strides 配列を走査するときに各次元にステップインするバイトのタプル
ndarray.ndim 配列の次元数
ndarray.data 配列のデータの開始を指すPythonバッファーオブジェクト
ndarray.size 配列内の要素の数
ndarray.itemsize バイト単位の1つの配列要素の長さ
ndarray.nbytes 配列の要素によって消費される合計バイト
ndarray.base メモリが他のオブジェクトからのものである場合は、ベースオブジェクト

NumPyのデータ型

型コード 説明
int8, int16, int32, int64 i1, i2, i4, i8 符号あり(8/ 16/ 32/ 64)ビット整数型
uint8, unit16, unit32, unit64 u1, u2, u4, u8 符号なし(8/ 16/ 32/ 64)ビット整数型
float16, float32, float64, float128 f2, f4, f8, f16 浮動小数点型
complex64, complex128, complex256 c8, c16, c32 複素数型
bool ? 真偽値型
object O Pythonオブジェクト型
string_ S 固定長文字列型
unicode_ U 固定長ユニコード文字列型

asarray関数

<ソースコード>
arr3 = np.array(
    [
        [1, 2, 3, 4, 5],
        [6, 7, 8, 9, 10],
        [11, 12, 13, 14, 15]
    ]
)
arr4 = np.asarray(arr3)
arr4[1][1]=100
pprint.pprint(arr3)
pprint.pprint(arr4)
<出力結果>
array([[  1,   2,   3,   4,   5],
       [  6, 100,   8,   9,  10],
       [ 11,  12,  13,  14,  15]])
array([[  1,   2,   3,   4,   5],
       [  6, 100,   8,   9,  10],
       [ 11,  12,  13,  14,  15]])

arr4の要素の値を変更すると、arr3の要素の値も変更されます。つまり、arr4とarr3は、同一の変数として扱われます。

arange関数

<ソースコード>
pprint.pprint(np.arange(12))
pprint.pprint(np.arange(3,13))
pprint.pprint(np.arange(start=2, stop=15, step=2))
<出力結果>
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
array([ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12])
array([ 2,  4,  6,  8, 10, 12, 14])

Python組み込み関数のrange関数と同じ動作で、ndarrayを生成します。

linspace関数

<ソースコード>
pprint.pprint(np.linspace(start=2, stop=5, num=6))
<出力結果>
array([2. , 2.6, 3.2, 3.8, 4.4, 5. ])

linspace関数は、第1引数startに最初の値、第2引数stopに最後の値、第3引数numに要素数を指定します。それらに応じた間隔(公差)が自動的に算出されます。

ones関数

<ソースコード>
pprint.pprint(np.ones(5))
pprint.pprint(np.ones([2, 3]))
<出力結果>
array([1., 1., 1., 1., 1.])
array([[1., 1., 1.],
       [1., 1., 1.]])

ones関数は、全ての要素が1のndarrayを生成します。

ones_like関数

<ソースコード>
data2 = np.array(
    [
        [0,1,2], 
        [3,4,5], 
        [6,7,8]
    ]
)
pprint.pprint(np.ones_like(data2))
<出力結果>
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])

ones_like関数は、引数に別のndarrayなどのシーケンス型変数を受けて、それをテンプレートとして全ての要素が1のndarrayを生成します。

zeros関数

<ソースコード>
pprint.pprint(np.zeros(5))
pprint.pprint(np.zeros([2, 3]))
<出力結果>
array([0., 0., 0., 0., 0.])
array([[0., 0., 0.],
       [0., 0., 0.]])

zeros関数は、全ての要素が0のndarrayを生成します。

zeros_like関数

<ソースコード>
data2 = np.array(
    [
        [0,1,2], 
        [3,4,5], 
        [6,7,8]
    ]
)
pprint.pprint(np.zeros_like(data2))
<出力結果>
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

zeros_like関数は、引数に別のndarrayなどのシーケンス型変数を受けて、それをテンプレートとして全ての要素が0のndarrayを生成します。

empty関数

<ソースコード>
pprint.pprint(np.empty(5))
pprint.pprint(np.empty([5,3]))
<出力結果>
array([1., 1., 1., 1., 1.])
array([[1.13628399e-311, 1.13626537e-311, 4.02977526e-270],
       [4.50388233e-240, 4.50854894e-270, 3.22395594e-269],
       [1.79182840e-259, 4.54911016e-269, 5.68473626e-269],
       [9.84372805e-269, 7.20503639e-269, 2.42909746e-268],
       [5.11687121e-269, 4.47581979e-309, 1.13628405e-311]])

empty関数は、全ての要素が不定のndarrayを生成します。

empty_like関数

<ソースコード>
data2 = np.array(
    [
        [0,1,2], 
        [3,4,5], 
        [6,7,8]
    ]
)
pprint.pprint(np.empty_like(data2))
<出力結果>
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

empty_like関数は、引数に別のndarrayなどのシーケンス型変数を受け、それをテンプレートとして全ての要素が不定のndarrayを生成します。

full関数

<ソースコード>
pprint.pprint(np.full(5, 10))
pprint.pprint(np.full([5,3], 10))
<出力結果>
array([10, 10, 10, 10, 10])
array([[10, 10, 10],
       [10, 10, 10],
       [10, 10, 10],
       [10, 10, 10],
       [10, 10, 10]])

full関数は、全ての要素が指定された値で埋められたndarrayを生成します。この関数を使用することで、0や1ではなく任意の値で全要素を初期化した配列ndarrayを生成することができます。

full_like関数

<ソースコード>
data2 = np.array(
    [
        [0,1,2], 
        [3,4,5], 
        [6,7,8]
    ]
)
pprint.pprint(np.full_like(data2, 10))
<出力結果>
array([[10, 10, 10],
       [10, 10, 10],
       [10, 10, 10]])

full_like関数は、引数に別のndarrayなどのシーケンス型変数を受けて、それをテンプレートとして全ての要素が指定された値で埋められたndarrayを生成します。この関数を使用することで、0や1ではなく任意の値で全要素を初期化した配列ndarrayを生成することができます。

identity関数

<ソースコード>
pprint.pprint(np.identity(5))
<出力結果>
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

identity関数は、N×Nの単位行列となるndarrayを生成します。

eye関数

<ソースコード>
pprint.pprint(np.eye(3, 4))
<出力結果>
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.]])

eye関数は、N×Nの単位行列となるndarrayを生成したあとで、列(行)数を指定して切り出します。

コメント

タイトルとURLをコピーしました