如何根据特定a、b值打印神经网络输出字典outvar的对应值?
按特定a、b值提取outvar数值的方法
1. 定位目标值对应的数组索引
a和b是用np.linspace生成的等间距数组,要找到特定a_target、b_target的位置,直接用np.argmin找最接近的元素索引即可:
import numpy as np # 替换成你要查询的具体数值 a_target = 0.3 b_target = 1.5 # 找a数组中最接近a_target的索引 a_idx = np.argmin(np.abs(a - a_target)) # 找b数组中最接近b_target的索引 b_idx = np.argmin(np.abs(b - b_target))
2. 提取对应outvar数值
outvar是单键字典,直接取唯一键对应的二维数组,再用索引取值:
# 获取outvar中的唯一键 out_key = next(iter(outvar.keys())) # 取出目标位置的数值 target_value = outvar[out_key][a_idx, b_idx] # 打印结果 print(f"a={a_target}, b={b_target}时,对应数值:{target_value}")
3. 整合到现有代码中
把查询逻辑直接加到你的__call__方法里,修改后的代码如下:
def __call__(self, invar, outvar): "自定义函数,绘制推理数据" ndim = len(invar) extent, outvar = self._interpolate_2D(100, invar, outvar) # 100需与linspace的点数一致 a = np.linspace(0, 1, 100) # z长度 b = np.linspace(0, 4, 100) # 时间 # --- 添加查询逻辑 --- # 设置要查询的a、b值 a_target = 0.3 b_target = 1.5 # 计算索引 a_idx = np.argmin(np.abs(a - a_target)) b_idx = np.argmin(np.abs(b - b_target)) # 提取并打印数值 out_key = next(iter(outvar.keys())) target_value = outvar[out_key][a_idx, b_idx] print(f"a={a_target:.2f}, b={b_target:.2f} 对应的数值:{target_value:.4f}") # --- 查询逻辑结束 --- # 绘图部分 dims = list(invar.keys()) fs = [] for k in outvar: f = plt.figure(figsize=(5, 4), dpi=100) plt.pcolor(a, b, outvar[k].T, vmax=1.0, vmin=0.0) # origin="lower", extent=extent) plt.xlabel(dims[0]) plt.ylabel(dims[1]) plt.colorbar() plt.title("浓度分布") plt.tight_layout() fs.append((f, k)) return fs
额外优化:精确插值
如果不想只取最接近的点,想要更精准的计算结果,可以用scipy的二维插值函数:
from scipy.interpolate import interp2d # 构建插值函数 interp_func = interp2d(a, b, outvar[out_key], kind='linear') # 传入目标值计算精确结果 precise_value = interp_func(a_target, b_target)[0] print(f"精确插值结果:{precise_value:.4f}")
内容的提问来源于stack exchange,提问作者NGA
相关产品推荐
相关产品推荐

