Python NumPy / ndarray の attribute #1
株式会社リュディアです。今回も NumPy についてまとめていきます。
今回から NumPy / ndarray の attribute(属性)についてまとめていきます。
今回も以下のリンクの内容を元にまとめを作っていきます。
公式ドキュメントによると ndarray の属性は Memory layout、Data type、Other の3つに分類可能です。公式ドキュメントに書かれている順序に従い具体例もあげてみていきます。
Memory layout
まず Memory layout に分類される属性の説明を記載します。
ndarray.flags : 配列のメモリ配置に関する情報
ndarray.strides : 行列の各次元方向の1つ隣の要素に移動するのに必要なバイト数をタプルで表示したもの
ndarray.ndim:ndarray の次元の数
ndarray.data : 配列のデータがどこから始まっているのかを示すPythonのバッファーオブジェクト
ndarray.size : 配列の要素数
ndarray.itemsize : 配列の要素のサイズをバイトで表現したもの
ndarray.nbytes : 配列全体のバイト数
ndarray.base : Base object if memory is from some other object.
実際のコードで Memory layout の attribute を出力してみます。
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
print(x.flags)
print(x.strides)
print(x.ndim)
print(x.data)
print(x.size)
print(x.itemsize)
print(x.nbytes)
print(x.base)
# C_CONTIGUOUS : True
# F_CONTIGUOUS : False
# OWNDATA : True
# WRITEABLE : True
# ALIGNED : True
# WRITEBACKIFCOPY : False
# UPDATEIFCOPY : False
# ここまで flags の出力
#
# (12, 4)
# 2
# <memory at 0x0000021B10F04EE0>
# 6
# 4
# 24
# None
最初の flags はたくさんの情報が表示されますがちょっと難しいですね。ここでは省略させてください。
strides は行列の各次元方向で1つ進むのにどれだけのバイト数を進める必要があるかという情報です。この例では1行進めるのに 12バイト必要、1列進めるのに4バイト必要であると表示しています。次のように絵で見るとわかりやすいと思います。
行列形式では2行3列であってもメモリ上では1列の連続した領域に並んでいます。この行列で1行進める、例えば 1 から 4 まで移動するには連続したメモリ上では 3要素分の移動が必要です。この例では 1要素が int32 = 4バイトなので 3 x 4 = 12 バイトの移動が必要ということになります。1列進める場合は要素1つ分なので 4バイトになります。結果はタプルで表示されるので (12, 4) となっています。
ndim は次元です。この例では2次元なので 2 と出力されます。
data はメモリ上のアドレスを表示してるように見えます。ここでは詳細は省略します。
size は配列の要素数を整数で表示します。ここでは 6 です。
itemsize は配列要素のサイズをバイトで表示します。ここでは要素が int32 なので 4バイトです。
nbytes は配列全体のサイズをバイトで表示します。ここでは要素数と要素サイズの乗算なので 6 x 4 = 24 バイトです。
base は None と表示されていますがここでは省略します。
Data type
Data type に分類される attribute は dtype のみです。以下の説明と具体例ですぐにわかりますね。
ndarray.dtype : 配列要素の dtype
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
print(x.flags)
#
# int32
#
Other attribute は次回にまとめます。
NumPy / ndarray の attributeに関するまとめの続きは以下からどうぞ。
では、ごきげんよう。
この記事が気に入ったらサポートをしてみませんか?