NumPyは高速な配列(sndarray)を利用することが出来る数値計算ライブラリです。データ分析やAIなどのライブラリにも内部で使用されており、その使い方は他のライブラリの基礎となっています。
ndarray型とリストの違いは、まず、ndarray型が高速であることです(主にC言語で書かれています)。また、ndarray型は同じデータ型しか入れることはできません。それ以外にも、さまざまな便利な機能が付いています。
pip install numpy
利用するにはまずnumpyをimportします。通常、numpyは別名 np と指定されます。 np.array(リスト)でndarray型を作成できます。
import numpy as np data = np.array([1, 2, 5]) print(data)
通常の配列と同様に使用することが出来ます。
print(data[0]) print(data[:2])
二次元配列も作成できます。shapeメソッドで何×何の配列化が分かります。
data = np.array( [[3, 1, 5], [2, 8, 4]] ) # shapeで何×何かが分かる。 print(data.shape) # (2, 3)
0への初期化
# 0に初期化 data = np.zeros(5) print(data) # [0, 0, 0, 0, 0])
※np.onesで、1に初期化できます。
arrange関数で、range関数のような初期化が可能です。
# 0から5個に初期化 data = np.arange(5) print(data) # [0, 1, 2, 3, 4] # 10から14に初期化 data = np.arange(10, 15) print(data) # [10, 11, 12, 13, 14] # 10までの奇数 data = np.arange(1, 10, 2) print(data) # [1, 3, 5, 7, 9]
NumPyではブロードキャストといって全ての要素に一斉に演算 が可能です。
data = np.array([8, 2, 4]) data = data + 1 print(data) # [9, 3, 5]
配列同士の足し算も可能です。
data1 = np.array([8, 2, 4]) data2 = np.array([1, 2, 3]) data = data1 + data2 print(data) # [9, 4, 7]
また、合計も簡単に行えます。
data = np.array([8, 2, 4]) print(data.sum()) # 14
他にも min(最小), max(最大), mean(平均), std(標準偏差)などが使えます。
最大値が何番目なのかをargmax で求めることができます。
data = np.array([5, 8, 7, 9, 4]) print(data.argmax()) # 3
最小値が何番目なのかをargmin で求めることができます。
data = np.array([5, 8, 7, 9, 4]) print(data.argmax()) # 4
比較演算子を使うと全ての要素を適用しTrueやFalseの配列になります。
data = np.array([5, 8, 7, 9, 4]) print(data > 5)
この配列をndarrayに適用すると、Trueのものだけを抜き出します。
data = np.array([5, 8, 7, 9, 4]) print(data[data > 5]) # [8 7 9]
このとき、dataそのものは変化していないことに注意しましょう。
reshapeを使うと、配列の次元(何×何)を変更することが出来ます。
6個の1次元配列を2×3個の2次元配列にしてみます。
data = np.array([5, 8, 7, 9, 4, 6]) data = data.reshape(2, 3) print(data) # [[5 8 7] # [9 4 6]]
逆に1次元にするには flatten()を使用します。
data = np.array([ [8, 2, 4], [3, 5, 9], ]) print(data.flatten())
sortで小さい順に並べ変えます。
data = np.array([5, 8, 7, 9, 4]) data.sort() print(data) # [4, 5, 7, 8, 9]
uniqueを使うと同じものを除いた配列を得ることが出来ます。
nums = [1, 1, 3, 3, 3, 4, 4] values = np.unique(nums) print(values) # 1,3,4
引数 return_counts=True とすると同じものが何個あるかを数えることが出来ます。 戻り値はタプルで (重複を除いた値, その数) です。
nums = [1, 1, 3, 3, 3, 4, 4] values, counts = np.unique(nums, return_counts=True) print(values) # 1,3,4 print(counts) # 2,3,2
NumPyでは乱数を多数用意することが出来ます。
1未満の乱数10個を用意してみます。
# 1未満の乱数10個 data = np.random.random(10) print(data)
1~6の乱数10個を用意してみます。
# 1~6の乱数10個 data = np.random.randint(1, 7, 10) print(data)
また、ランダムに並び替えることも出来ます。
# シャッフル data = np.array([9, 1, 5]) np.random.shuffle(data) print(data)