『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

【NumPy】配列の次元数(ndim)・軸(axis)・サイズ(size)

配列の次元数と軸

配列の次元数 (ndim)

NumPy の配列オブジェクト ndarray を生成するときに [] で括った数が、その配列の次元数となります。ここであらためて、NumPy における配列の次元数が何を意味するのか、図を使って直感的に説明しておきます。

まず最初に 1 次元配列について考えます。たとえば、5 個の要素をもつ配列を作成したとします。これは 0 ~ 4 のインデックス番号が割り当てられた箱のそれぞれに要素が 1 個ずつ入っているということです。今、この 1 次元配列をまとめて1つの大きな箱とみなして、青色に塗ることにします。
 
Python NumPy 配列の次元2
同様に、同じ要素数をもつ別の 1 次元配列をいくつかもってきて、他と区別できるように別々の色で塗ることにします。1 次元配列は何個用意してもいいのですが、とりあえず全部で 3 個揃えることにします。そして下図のように縦に並べます。
 
Python NumPy 配列の次元3
このようにして 5 × 3 の 2 次元配列が生成されます。青、赤、黄色の箱にあらためて 0, 1, 2 というインデックス番号を割り当てると、すべての要素を 2 つの番号で参照することができます。たとえば赤の 3 番目の要素は [1, 3] で参照できます。
 
Python NumPy 多次元配列
それでは実際に 5 × 3 の配列をつくって次元数を表示させてみましょう。

# NUMPY_DIMENSION

# In[1]

import numpy as np

box_blue = [2, 3, 5, 7, 11]
box_red = [13, 17, 19, 23, 29]
box_yellow = [31, 37, 41, 43, 47]

# 2次元配列を作成
x = np.array([box_blue, box_red, box_yellow])

print(x)
# [[ 2  3  5  7 11
#  [13 17 19 23 29]
#  [31 37 41 43 47]]

2行目4列目の要素を参照してみます。

# In[2]

# 2行目の4列目の要素を取得
print(x[1, 3])

# 23

配列のデータ属性 (インスタンス変数) ndim にアクセスして次元数を取得します。

# In[3]

# 配列の次元数を取得
print(x.ndim)

# 2

[[10, 20, 30]] も [] で 2 重に括られているので 2 次元配列として扱われます。

# In[4]

x = np.array([[10, 20, 30]])

print(x)
print("次元数:", x.ndim)

# [[10 20 30]]
# 次元数:2

これは下図のように、2 次元の箱に 1 次元配列が 1 個入っていることを意味しています。
 
Python Numpy 2次元配列③

配列の軸 (axis)

NumPy には axis という引数を受け取る関数が数多く存在します。axis とは一般には「座標軸」を意味しますが、NumPy では配列の軸を意指します。二次元配列の縦軸は axis=0, 横軸は axis=1 です。たとえば、要素の和を計算する numpy.sum() の axis に 0 を渡すと、各次元の要素を縦方向に合計して 1 次元配列を生成します。

# NUMPY_AXIS

# In[1]

import numpy as np

box_blue = [2, 3, 5, 7, 11]
box_red = [13, 17, 19, 23, 29]
box_yellow = [31, 37, 41, 43, 47]

x = np.array([box_blue, box_red, box_yellow])

# 各次元の要素を縦方向に足し合わせる
s = np.sum(x, axis=0)

print(s)
# [46 57 65 73 87]

axis に 1 を渡すと横方向に合計して 1 次元配列を生成します。

# In[2]

# 各次元の要素を横方向に足し合わせる
s = np.sum(x, axis=1)

print(s)
# [28 101 199]

縦軸 (axis = 0) と横軸 (axis=1) に並んでいる要素数は、ndarrayオブジェクトの shape というデータ属性に記録されています。

# In[3]

# 行方向と列方向の要素の数を取得
print(x.shape)

# (3, 5)

ndarray.size

配列に含まれる全要素の数は ndarray.size で取得できます。

# NUMPY_SIZE

# In[1]

import numpy as np

# 全要素が1の3×5配列を生成
arr = np.ones((3,5))

# 配列の全要素数を取得
print(arr.size)

# 15

 

コメント