计算多个时间序列平均值的快速方法?

时间:2013-07-23 09:50:21

标签: python numpy k-means

我正在使用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是我拥有的质心列表,data是整个数据集,label是带有classlabels的列表。

1 个答案:

答案 0 :(得分:1)

我认为以下内容与您的代码相同,没有任何明确的中间数组:

for c_i in range(k):
    c[c_i] = np.mean(data[label == c_i, :], axis=0)

摆脱最后一个循环更难,但这应该有效:

label_counts = np.bincount(label)
label_sums = np.histogram2d(np.repeat(label, data_length),
                            np.tile(np.arange(data_length), k),
                            bins=(k, data_length),
                            weights=data.ravel())[0]
c = label_sums / label_count[:, None]