Python NumPy

NumPy

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)