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

递归图仅显黑白点无灰度区域,是否与阈值或代码等因素相关?

递归图灰度缺失问题排查与解决

一、阈值选择确实是核心影响因素

  • 递归图的灰度通常对应递归点的重复出现频次(即某对状态点被判定为递归的次数)。如果你的阈值设置过于严苛(比如只保留距离完全为0的点),或者计算递归矩阵时仅做了「是/否递归」的二值化判断,自然只会输出黑白图。
  • 举个直白的例子:如果代码里是R[i,j] = 1 if distance < threshold else 0这种逻辑,矩阵里只有0和1两种值,绘图时肯定只能是黑白。要生成灰度,必须让R[i,j]存储连续数值——比如该点的递归次数,或者距离值的归一化结果,而非简单的二值标记。

二、代码层面的常见问题

  • 检查递归矩阵生成逻辑:是否仅做了二值化判断?如果是,改成统计每个(i,j)对满足阈值条件的次数(比如滑动窗口内的匹配计数),或者将距离值归一化后作为灰度映射值。
  • 检查绘图参数:比如用matplotlib.imshow()时,是否指定了cmap='gray'?如果误用'binary'这类二值色图,会强制黑白显示;换成'gray'或'viridis'这类连续色图,同时确保输入矩阵是连续数值类型(不是仅含0/1的整数矩阵)。
  • 代码修正示例:
    原二值化代码:
    # 仅生成0/1的二值递归矩阵
    R = np.where(distance_matrix < threshold, 1, 0)
    plt.imshow(R, cmap='binary')
    
    修改为灰度版:
    # 方式1:统计每个点的递归频次(适合时间序列递归计数)
    window = 5  # 根据数据调整窗口大小
    R = np.zeros_like(distance_matrix, dtype=np.float32)
    for i in range(window, len(data)):
        for j in range(window, len(data)):
            R[i,j] = np.sum(distance_matrix[i-window:i, j-window:j] < threshold)
    # 归一化到0-1区间
    R = R / np.max(R)
    
    # 方式2:用距离值映射灰度(距离越小,灰度越亮)
    # R = 1 - (distance_matrix / np.max(distance_matrix))
    
    plt.imshow(R, cmap='gray')
    

三、数据特性的潜在影响

  • 如果你的时间序列状态空间极度离散,或者所有满足递归条件的点都是严格匹配(距离为0),哪怕调整阈值也难出现中间灰度。这种情况下可以尝试:
    • 调整嵌入维度和延迟时间,扩大状态空间的覆盖范围
    • 适度放宽阈值,让更多接近的状态点被纳入,从而产生不同频次的递归点,形成灰度差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:33:10