Numpy を使用して Python で K-Means アルゴリズムを作成しています。すべての重心までの距離の部分はかなり最適化されています (重心のマトリックスを個別に計算するのではなく) が、新しい重心の計算部分に苦労しています。データセットから重心ごとのデータをコピーして、平均を計算しています。
コピーしない方が早いと思います。Python/Numpy でこれを行うにはどうすればよいですか?
コードスニペット:
for c_i in range(k):
sub_data = np.zeros([n_per_c[c_i],data_width])
sub_data_i = 0
for data_i in range(data_length):
if label[data_i] == c_i:
sub_data[sub_data_i,:] = data[data_i,:]
sub_data_i += 1
c[c_i] = np.mean(sub_data, axis=0)
c は私が持っている重心のリスト、データはデータセット全体、ラベルはクラスラベルのリストです。