独自の配列オブジェクトであるndarray(N-dimensional array)は、NumPyの効率的な数値解析を実現する最も基本的なクラスです。
ndarrayの特徴
ndarrayは次のような特徴を持ちます。
- 通常のPythonの配列とは異なり、同じ型の要素しか格納することができません。
- 作成時に固定のサイズを持ち、サイズが変更された場合は多くのケースで新しく作成し直されます。
- 同じ型かつ固定サイズであるため、汎用性の高いリストなどよりも大量のデータを効率的に処理することができます。
- インデックス値での取得やスライスを利用することができます。
- 各計算における有用なメソッドを持ちます。また多くの関数・メソッドの引数や戻り値で利用されます。
ndarrayの作成方法
ndarrayは以下のような形で作成します。
import numpy array_like = [[1, 10, 100], [2, 20, 200]] print('== array ==') print(numpy.array(array_like)) print('== zeros / zeros_like ==') print(numpy.zeros([2, 3])) print('-------------------') print(numpy.zeros_like(array_like)) print('== ones / ones_like ==') print(numpy.ones([2, 3])) print('-------------------') print(numpy.ones_like(array_like))
== array == [[ 1 10 100] [ 2 20 200]] == zeros / zeros_like == [[ 0. 0. 0.] [ 0. 0. 0.]] ------------------- [[0 0 0] [0 0 0]] == ones / ones_like == [[ 1. 1. 1.] [ 1. 1. 1.]] ------------------- [[1 1 1] [1 1 1]]
numpy.arrayは配列オブジェクトを指定してndarrayを作成します。この配列オブジェクトはndarrayであったり、タプルやリストなどのシーケンスです。numpy.zeros、numpy.onesは配列の形状を指定して作成します。前者はその配列を0で、後者は1で初期化します。numpy.zeros_like、numpy.ones_likeは配列オブジェクトを指定し、その配列と同じ形状をもったndarrayを作成します。初期値は0(zeros_like)もしくは1(ones_like)です。
空のndarrayを作成する場合はnumpy.empty、numpy.empty_likeを用います。要素がまったくないわけではなく、格納される値はランダムです。
import numpy array_like = [[1, 10, 100], [2, 20, 200]] print('== empty / empty_like ==') print(numpy.empty([2, 3])) print('-------------------') print(numpy.empty_like(array_like))
== empty / empty_like == [[ 2.41278729e-315 2.41277662e-315 2.50032616e-315] [ 9.44887463e-120 6.73793622e-120 1.92978148e-110]] ------------------- [[859254326 909326647 761606706] [ 3158577 0 0]]
標準のrangeのような形で作成する場合はnumpy.arangeを使用します。
import numpy print(numpy.arange(10)) print(numpy.arange(10, 20, 2))
[0 1 2 3 4 5 6 7 8 9] [10 12 14 16 18]
データ型を指定して作成する場合は以下のようにします。
import numpy array_like = [[1, 10, 100], [2, 20, 200]] print(numpy.array(array_like, numpy.float32))
[[ 1. 10. 100.] [ 2. 20. 200.]]
ndarrayのデータ型
NumPyで指定可能なデータ型には次のようなものがあります。
import numpy array_like = [[0, 1, 100]] print(numpy.array(array_like, numpy.bool_)) print(numpy.array(array_like, numpy.int_)) print(numpy.array(array_like, numpy.intc)) print(numpy.array(array_like, numpy.intp)) print(numpy.array(array_like, numpy.int8)) print(numpy.array(array_like, numpy.int16)) print(numpy.array(array_like, numpy.int32)) print(numpy.array(array_like, numpy.int64)) print(numpy.array(array_like, numpy.uint8)) print(numpy.array(array_like, numpy.uint16)) print(numpy.array(array_like, numpy.uint32)) print(numpy.array(array_like, numpy.uint64)) print(numpy.array(array_like, numpy.float_)) print(numpy.array(array_like, numpy.float16)) print(numpy.array(array_like, numpy.float32)) print(numpy.array(array_like, numpy.float64)) print(numpy.array(array_like, numpy.complex_)) print(numpy.array(array_like, numpy.complex64)) print(numpy.array(array_like, numpy.complex128))
[[False True True]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0 1 100]] [[ 0. 1. 100.]] [[ 0. 1. 100.]] [[ 0. 1. 100.]] [[ 0. 1. 100.]] [[ 0.+0.j 1.+0.j 100.+0.j]] [[ 0.+0.j 1.+0.j 100.+0.j]] [[ 0.+0.j 1.+0.j 100.+0.j]]
各データ型の範囲等は下記リンクを参照してください。
https://docs.scipy.org/doc/numpy/user/basics.types.html#array-types-and-conversions-between-types
ndarrayの属性
ndarrayの主な属性には以下のようなものがあります。
import numpy na = numpy.array([[1, 10, 100], [2, 20, 200]]) # データ型 print('== dtype ==') print(na.dtype) # 全要素数 print('== size ==') print(na.size) # 1要素あたりのバイト数 print('== itemsize ==') print(na.itemsize) # 総バイト数 print('== nbytes ==') print(na.nbytes) # 次元数 print('== ndim ==') print(na.ndim) # 配列の形状 print('== shape ==') print(na.shape) # 次元あたりの総バイト数とバイト数と1要素あたりのバイト数 print('== strides ==') print(na.strides) # 実数・虚数(複素数) print('== real / imag ==') print(na.real) print(na.imag) # 配列の1次元イテレータ print('== flat ==') for i in na.flat: print(i)
== dtype == int32 == size == 6 == itemsize == 4 == nbytes == 24 == ndim == 2 == shape == (2L, 3L) == strides == (12L, 4L) == real / imag == [[ 1 10 100] [ 2 20 200]] [[0 0 0] [0 0 0]] == flat == 1 10 100 2 20 200