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

如何绘制区分witness来源的负数值彩图并将矩阵归一化至0-3?

实现步骤与代码示例

核心思路

  1. 追踪witness来源:不能仅存储较小的witness值,需同步记录该值来自witness1还是witness2,为后续颜色区分提供依据。
  2. 归一化处理:将所有有效witness值线性缩放到0-3范围,保证可视化的一致性。
  3. 颜色映射规则:
    • 来自witness1的负值:蓝色
    • 来自witness2的负值:黄色
    • 所有正值(无论来源):白色

完整代码实现

import numpy as np
import matplotlib.pyplot as plt

# 1. 生成参数网格(100×100)
h_vals = np.linspace(0.03, 3, 100)
h0_vals = np.linspace(0.03, 3, 100)
# 初始化两个矩阵:存储最小witness值、存储值的来源(1=witness1,2=witness2)
min_witness = np.zeros((100, 100))
witness_source = np.zeros((100, 100), dtype=int)

# 2. 遍历参数组合(替换为你的实际计算逻辑)
for i, h in enumerate(h_vals):
    for j, h0 in enumerate(h0_vals):
        # --- 以下为示例逻辑,替换为你的真实计算步骤 ---
        # 步骤1:求解使差值/L=0的T值
        T_solved = 1.0  # 示例值,替换为你的求解结果
        # 步骤2:计算g0、gc、gs算子
        g0, gc, gs = 0.5, 0.3, 0.2  # 示例值,替换为你的计算结果
        # 步骤3:计算witness1和witness2
        witness1 = np.random.randn()  # 示例值,替换为你的计算结果
        witness2 = np.random.randn()  # 示例值,替换为你的计算结果
        # --- 计算逻辑结束 ---
        
        # 记录最小witness值及其来源
        if abs(witness1) < abs(witness2):
            min_witness[i, j] = witness1
            witness_source[i, j] = 1
        else:
            min_witness[i, j] = witness2
            witness_source[i, j] = 2

# 3. 将witness值归一化到0-3范围
valid_vals = min_witness[~np.isnan(min_witness)]
if len(valid_vals) == 0:
    raise ValueError("未获取到有效witness值")
norm_min, norm_max = valid_vals.min(), valid_vals.max()
normalized_witness = 3 * (min_witness - norm_min) / (norm_max - norm_min)

# 4. 生成颜色矩阵(RGB格式)
color_matrix = np.ones((100, 100, 3))  # 默认白色(正值)
# 标记witness1的负值为蓝色
w1_neg_mask = (witness_source == 1) & (min_witness < 0)
color_matrix[w1_neg_mask] = [0, 0, 1]
# 标记witness2的负值为黄色
w2_neg_mask = (witness_source == 2) & (min_witness < 0)
color_matrix[w2_neg_mask] = [1, 1, 0]

# 5. 可视化结果
plt.figure(figsize=(8, 8))
plt.imshow(color_matrix, extent=[0.03, 3, 0.03, 3], origin='lower')
plt.xlabel('h0')
plt.ylabel('h')
plt.title('Witness Visualization')
plt.colorbar(label='Normalized Witness Value (0-3)')
plt.show()

关键细节说明

  • 来源追踪:witness_source矩阵是区分颜色的核心,必须和min_witness矩阵同步更新,不能仅存储数值。
  • 归一化逻辑:基于所有有效witness值的极值做缩放,避免单个极端值破坏整体可视化效果;若计算中存在NaN值,需提前过滤。
  • 颜色调整:可通过修改RGB值调整颜色深浅,比如深蓝色用[0,0,0.8],浅黄色用[1,1,0.5]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:20:29