freedom-_-qの勉強履歴

メモ書きが主になるかと思います。勉強強制のために一日一記事目指してます。頭良くないので間違いが多々あるかと思います。

scipy.linalg.normを使ってみる

L2ノルム

一番使うのはこれだと思う。いわゆるベクトルの大きさを計算できる。
通常、x,y平面におけるベクトルの大きさを計算するときは、 \sqrt{x^{2}+y^{2}}を素直にコードに書くと思う。
VBAであれば=SQRT(SUMSQ(“セルの範囲”))とかで計算するあれである。
scipy.linalg.normの引数ord=を2にすればベクトルの大きさを返す。

from scipy.linalg import norm

v = [1, 1]
norm(v, ord=2)
#1.4142135623730951

v = [1, 1, 1]
norm(v, ord=2)
#1.7320508075688772

第一引数を行列にした場合、axis=に(0|1)を与え、ノルムを取る方向を指定する。pandasとかと同じで行方向が0、列方向が1になっている。

v = np.random.randint(1,10, size=(10,3))
#array([[7, 6, 7],
#       [4, 3, 4],
#       [4, 7, 2],
#       [4, 3, 8],
#       [6, 7, 1],
#       [6, 5, 2],
#       [1, 3, 5],
#       [8, 3, 4],
#       [1, 1, 9],
#       [5, 7, 3]])

norm(v, ord=2, axis=0)
#array([16.1245155 , 15.65247584, 16.40121947])

norm(v, ord=2, axis=1)
#array([11.5758369 ,  6.40312424,  8.30662386,  9.43398113,  9.2736185 ,
#        8.06225775,  5.91607978,  9.43398113,  9.11043358,  9.11043358])

...業務で使いそうなのはこれくらいだし、これ以上やることないな...