You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从时间序列计算质心y坐标?Pandas与Scipy相关疑问

质心坐标计算问题解答

背景与现有实现

现有形状为N×T的Pandas DataFrame(N=10为样本数,T=6为时间步长):

import pandas as pd
import numpy as np
from scipy import ndimage
data = pd.DataFrame(np.random.random_sample((10, 6)))

需要为每个样本计算质心的x、y坐标,目前已完成x坐标的计算:

time_axis = np.arange(data.shape[1])
centroid_x = np.sum(data.values * time_axis, axis=1) / np.sum(data.values, axis=1)

该结果与scipy.ndimage.center_of_mass处理单行样本的输出一致:

ndimage.center_of_mass(data.loc[0, :].values)

核心疑问解答

1. 为什么center_of_mass只返回单个值?

因为你传入的是一维数组(data.loc[0, :].values的形状为(6,)),center_of_mass对一维输入仅返回该维度上的质心位置;只有传入二维数组时,才会返回(x, y)坐标元组。你计算的centroid_x本质就是这个一维分布(x轴为时间步,每个位置的质量对应行中数值)的质心位置,所以和center_of_mass的输出匹配。

2. 质心y坐标的正确计算方式

你提出的centroid_y = data.values.mean(axis=1)是否正确,取决于你对“质量权重”的定义:

  • 若每个时间步的点质量相同(权重为1),则y坐标确实是行均值,此时质心是所有(x_t, y_t)点的算术平均;
  • 若遵循你计算x坐标的逻辑(以每个时间步的y值作为该点的质量权重),则y坐标应为y值的加权平均,权重为y值本身,计算公式为:
    centroid_y = np.sum(data.values ** 2, axis=1) / np.sum(data.values, axis=1)
    

结合你补充的样本分布图(曲线为x-时间步、y-对应数值的关系),更合理的是采用第二种加权方式,和x坐标的计算逻辑保持一致。

内容的提问来源于stack exchange,提问作者Murilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:15:14