人工知能してみる

人工知能の中の人が機械学習とか統計とかAI的なことを書き連ねます

複数のnumpy1次元ベクトルの平均を得る

機械学習をしているとベクトル演算をする機会は多いと思うのですが慣れていないとハマる(ハマった)のでメモ。

前に書いたfastTextを使って遊んでいたのですが、文書ベクトルとして単語ごとのベクトルを相加平均したものを得ようと思ったら手間取りました。
fastTextで得られる単語ベクトルは1次元のnumpyベクトルです。何次元になっているかは学習させたときに指定していると思います。で、これを単語の数だけ計算して、それらの相加平均を得る、というのが目標です。つまり複数のベクトルから相加平均ベクトルを得るのが目標です。
調べてみたんですが要素ごとの平均を得るメソッドは無さそうなので順番に足していって最後に割り算します。

import numpy as np

vec_a = np.array([1, 2, 3])
vec_b = np.array([4, 5, 6])
vec_stack = np.vstack((vec_a, vec_b))
# array([[1, 2, 3],
#        [4, 5, 6]])
vec_sum = np.sum(vec_sum, axis=0)  # 列の和
vec_mean = vec_sum / 2  # vstackしたベクトルの数で割る

最後の割り算ですがスカラーで割ることで全要素に演算することができます。全体を倍にするとかでも同じようにできますね。
今回の方法は1次元ベクトルだったので簡単にできましたが2次元以上の高次元ベクトルだとどうやるのがよいのか分からないので調べたいところ。