NumPyの機能で最もよく利用するのが、今回紹介するndarrayだ。
ndarrayの名称は、N次元配列(N dimensional array)から由来されている。
今回はndarrayオブジェクトの生成方法を中心に紹介するが、ndarrayとはどういったオブジェクトなのかも簡単に紹介する。
まずはndarrayを利用した機能のうち、基礎的な算術演算の例から見ていこう。
import numpy as np
# 乱数を生成
data = np.random.randn(2, 3)
print(data)
print(data * 10)
print(data + data)
# 以下出力結果
[[-0.14803075 -0.73867004 -0.28079964]
[ 0.21167575 0.39796281 -0.84258059]]
[[-1.48030746 -7.38670036 -2.80799635]
[ 2.11675745 3.97962814 -8.42580588]]
[[-0.29606149 -1.47734007 -0.56159927]
[ 0.42335149 0.79592563 -1.68516118]]
今回は、乱数からなるndarray配列を変数dataに格納し、全ての配列に10を掛けたり、配列同士を足し合わせたりという処理をおこなっている。
一例として、小さな多次元配列の算術演算を紹介したが、本来ndarrayでは大規模なデータ処理を高速かつ柔軟におこなうことができる。
コンテンツ
ndarrayオブジェクトの定義
ndarrayオブジェクトは、NumPyのarray関数を使用すると簡単に定義することができる。
引数にはリストやディクショナリなどのシーケンスを与えてやる。
import numpy as np
data = [1, 1.1, 2, 3]
arr = np.array(data)
arr # array([1. , 1.1, 2. , 3. ])
多次元配列を定義する場合は以下のとおり。
import numpy as np
data = [[1, 1.1, 2, 3], ['a', 'b', 'c']]
arr = np.array(data)
arr # array([list([1, 1.1, 2, 3]), list(['a', 'b', 'c'])], dtype=object)
dtypeとshape属性
ndarrayは原則として、多次元配列の要素は全て同じデータ型である必要がある。
以下のような定義をしたところでエラーになるわけではないのだが、この後説明するdtypeで正確なデータ型を取得できなくなってしまうのだ。
import numpy as np
data = [[1, 1.1, 2, 3], ['a', 'b', 'c']]
arr = np.array(data)
dtype
ndarrayにはdtypeという属性があり、配列の要素から推測されるデータ型を取得できる。
import numpy as np
data1 = [1, 2, 3]
arr1 = np.array(data1)
data2 = [1, "a", 1.1]
arr2 = np.array(data2)
arr1.dtype # dtype('int64')
arr2.dtype # dtype('<U21')
arr1は全ての要素がint型なので期待される値を得られたが、arr2ではデータ型がバラバラになっているため、正確なデータ型を得られることができなかった。
shape
shape属性はndarrayの次元数を取得することができる。
import numpy as np
data1 = [[1, 2, 3], [4, 5, 6]]
arr1 = np.array(data1)
arr1.shape # (2, 3)
この場合、arr1は2行3列という次元を持つ配列であることが得られる。
ndarrayの様々な生成方法
先に紹介したNumPyのarray関数を使う方法が最もベーシックな生成方法だが、他にも様々な方法が用意されている。
全ての要素に0を設定
np.zerosを使えば、引数に指定したサイズのndarrayを生成し、同時に全ての要素に0を設定することができる。
import numpy as np
arr = np.zeros(10)
arr # array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
arr.dtype # dtype('float64')
また、引数にタプルを指定して多次元配列を定義することも可能だ。
import numpy as np
arr = np.zeros((2, 3))
# array([[0., 0., 0.],
# [0., 0., 0.]])
全ての要素に1を設定
np.onesを使えば全ての要素に1を設定したndarrayを生成できる。
import numpy as np
arr = np.ones(10)
arr # array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
連続した値を設定
np.arangeは、Python組み込みのrange関数と同等の機能を持ち、連続した値を設定することができる。
import numpy as np
arr = np.arange(10)
arr # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
全ての要素に指定した値を設定
np.fullは第一引数に配列のサイズ(shape)、第二引数に設定したい値を指定する。
import numpy as np
arr = np.full((2, 3), "hoge")
print(arr)
# [['hoge' 'hoge' 'hoge']
# ['hoge' 'hoge' 'hoge']]
まとめ
今回はndarrayの基礎編として、まずはオブジェクトを生成する方法を紹介しただけに留めた。
次回以降はデータ型の紹介やベクトル演算など、込み入った機能を紹介していこうと思う。