Skip to main content
 首页 » 编程设计

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

2025年05月04日11xxx_UU

我正在使用 Numpy 在 Python 中编写 K-Means 算法。 distance-to-all-centroids 部分非常优化(使用质心矩阵而不是每个单独计算),但我正在努力处理 compute-new-centroid 部分。我正在从数据集中复制每个质心的数据以计算平均值。

我觉得不复制会更快。我如何在 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 是带有类标签的列表。

请您参考如下方法:

我认为下面的代码和你的代码一样,没有任何明确的中间数组:

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]