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

基于Pandas的水星逆行检测:360度环形坐标边界问题求解

360度环形坐标下行星逆行点的准确检测方案

问题根源

常规极值检测(如scipy.signal.argrelextrema)基于线性数值比较,无法处理角度的环形特性:当行星顺行跨越0/360°边界时(如从358°跳到0°),数值上的“骤降”会被误判为逆行启动的极大值点,但实际是正常的顺行角度循环。

解决方案

核心是消除环形坐标的不连续性,将角度转换为连续的线性数据,或计算真实的环形角度变化量,再进行逆行检测。

方法1:展开环形角度为连续线性序列

将环形角度转换为无跳变的线性序列,顺行跨边界时自动累加360°,保证数据连续性:

import numpy as np
from scipy.signal import argrelextrema

# 示例角度数据(替换为你的实际数据)
angles = np.array([350.60172, 352.53184, 354.47785, 356.43861, 358.41273, 0.39843, 2.39354, 4.39545, 6.40106, 8.40673, 10.40828, 12.40098, 14.37956, 16.33824])

# 展开角度为连续线性序列
expanded_angles = np.zeros_like(angles)
expanded_angles[0] = angles[0]
for i in range(1, len(angles)):
    diff = angles[i] - angles[i-1]
    # 顺行跨边界(差值小于-180°),累加360°修正
    if diff < -180:
        expanded_angles[i] = expanded_angles[i-1] + diff + 360
    else:
        expanded_angles[i] = expanded_angles[i-1] + diff

# 检测逆行开始的极大值点
retro_start_indices = argrelextrema(expanded_angles, np.greater)[0]
print("逆行开始的索引位置:", retro_start_indices)

方法2:基于真实环形角度变化量检测

计算相邻角度的真实变化量(考虑环形特性),通过变化量的正负切换判断逆行启动:

import numpy as np

# 示例角度数据
angles = np.array([350.60172, 352.53184, 354.47785, 356.43861, 358.41273, 0.39843, 2.39354, 4.39545, 6.40106, 8.40673, 10.40828, 12.40098, 14.37956, 16.33824])

# 计算原始差值
diffs = np.diff(angles)
# 转换为真实环形变化量:顺行跨边界补360°,逆行跨边界减360°
true_diffs = np.where(diffs < -180, diffs + 360, np.where(diffs > 180, diffs - 360, diffs))

# 寻找变化量由正转负的临界点(逆行启动点)
# 前一个变化量为正(顺行),当前为负(逆行)
retro_start_indices = np.where((true_diffs[:-1] > 0) & (true_diffs[1:] < 0))[0] + 1
print("逆行开始的索引位置:", retro_start_indices)

效果验证

  • 对于正常逆行案例(如8月的水星数据),两种方法都能准确找到极大值/由正转负的临界点,即逆行启动点。
  • 对于跨边界的顺行案例(如3月的水星数据),处理后的数据不会出现误判的极值点,避免了边界干扰。

内容的提问来源于stack exchange,提问作者Igor K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:17:07