Numpy備忘録
仕事ではpandasのデータフレームをよく利用するが、計算速度を向上させるためにはdf.valuesでNumpy配列にして計算させることが多い。 ここでは、numpyの基本的な使い方の備忘録を記録する。(numpy公式ドキュメント)
まずはお決まりのimport
import numpy as np
以下、備忘録
'''np.where(condition[, x, y])''' a = np.array([0,1,1,1,2]) np.where(a > 1, a*10, a) # a > 1がTrueのときa*10, Falseのときaとなる # array([ 0, 1, 1, 1, 20]) np.where(a > 1) # 条件のみの場合は該当するindexを返す # (array([4]),) '''np.bincount(x, weights=None, minlength=0)''' a = np.array([0,1,1,1,2]) np.bincount(a,minlength=5) # minlengthで頻度をカウントするindex数を設定する # array([1, 3, 1, 0, 0]) w = np.array([0.3, 0.5, 0.2, 0.7, 1., -0.6]) x = np.array([0, 1, 1, 2, 2, 2]) np.bincount(x, weights=w) # weightsにより、同じラベルでもindexにより重みを変えて頻度を集計する # array([ 0.3, 0.7, 1.1])
axisの考え方
- 行方向:行を圧縮 。2次元の場合はaxis=0
- 列方向:列を圧縮 。2次元の場合はaxis=1
data = np.array( [ [1,10,10], [1,10,10], [2,20,20], [2,20,20], ] ) print(data.shape) print(data.reshape(2,2,3))
data.reshape(2,2,3)では、(データ数、行、列)となっている。
この場合、行方向はaxis=1、列方向はaxis=2となる。
print(data.reshape(2,2,3).sum(axis=1)) #[[ 2 20 20] # [ 4 40 40]] print(data.reshape(2,2,3).sum(axis=2)) #[[21 21] # [42 42]]