如何从Pandas DataFrame中沿指定向量提取3D模拟温度分布数据?
提取3D温度模拟数据中指定直线上的温度分布
问题背景
我有一个Pandas DataFrame,存储了封闭空间内温度值的3D模拟结果,结构如下:
X | Y | Z | T ----+-----+-----+--- x0 | y0 | z0 | T0 x1 | y1 | z1 | T1 ....|.....|.....|... xn | yn | zn | Tn
通过两个点定义了一条直线向量:
vector (x0,y0,z0), (x1,y1,z1)
需求是获取这条直线上的温度分布,也就是提取该向量路径上的T值。模拟场景为两块绿色平板之间的离散点集,目标直线为垂直连接两块平板的中心直线,最终目标是绘制该直线上的温度分布曲线。
已完成代码
import pandas as pd SCALE = 0.001 X = 76 * SCALE Y = 1744 * SCALE Z = 260 * SCALE vector = (0.0, Y / 2, 0.0), (X, Y / 2, 0.0) # center vector raw_data = pd.read_csv("data.csv") df = raw_data[['Points_0','Points_1','Points_2', 'T']] df = df.rename(columns={'Points_0': 'X', 'Points_1': 'Y', 'Points_2': 'Z'})
data.csv示例内容
Block Name,Point ID,Points_0,Points_1,Points_2,Points_Magnitude,T,U_0,U_1,U_2,U_Magnitude,p,p_rgh internalMesh,0,0,0,-0.26,0.26,288.161,0,0,0,0,101486,101486 internalMesh,1,0.00217143,0,-0.26,0.260009,288.182,0,0,0,0,101486,101486 internalMesh,2,0.00434286,0,-0.26,0.260036,288.212,0,0,0,0,101486,101486 internalMesh,3,0.00651429,0,-0.26,0.260082,288.24,0,0,0,0,101486,101486 internalMesh,4,0.00868571,0,-0.26,0.260145,288.268,0,0,0,0,101486,101486 internalMesh,5,0.0108571,0,-0.26,0.260227,288.294,0,0,0,0,101486,101486 internalMesh,6,0.0130286,0,-0.26,0.260326,288.32,0,0,0,0,101486,101486 internalMesh,7,0.0152,0,-0.26,0.260444,288.346,0,0,0,0,101486,101486 internalMesh,8,0.0173714,0,-0.26,0.26058,288.372,0,0,0,0,101486,101486 internalMesh,9,0.0195429,0,-0.26,0.260733,288.397,0,0,0,0,101486,101486 internalMesh,10,0.0217143,0,-0.26,0.260905,288.423,0,0,0,0,101486,101486 internalMesh,11,0.0238857,0,-0.26,0.261095,288.448,0,0,0,0,101486,101486 internalMesh,12,0.0260571,0,-0.26,0.261302,288.473,0,0,0,0,101486,101486 internalMesh,13,0.0282286,0,-0.26,0.261528,288.496,0,0,0,0,101486,101486 internalMesh,14,0.0304,0,-0.26,0.261771,288.52,0,0,0,0,101486,101486 .... internalMesh,69695,0.076,1.744,0.26,1.76491,307.722,0,0,0,0,101466,101485
解决方案
思路
给定的目标直线垂直于平板,因此直线上的点满足Y坐标固定为Y/2、Z坐标固定为0。考虑到模拟数据可能存在浮点精度误差,设置极小容差进行近似匹配,筛选出符合条件的点后按X坐标排序,即可得到直线路径上的温度分布。
完整代码
import pandas as pd import matplotlib.pyplot as plt SCALE = 0.001 X = 76 * SCALE Y = 1744 * SCALE Z = 260 * SCALE vector = (0.0, Y / 2, 0.0), (X, Y / 2, 0.0) # center vector target_y = Y / 2 target_z = 0.0 # 处理浮点精度误差的容差 tolerance = 1e-6 raw_data = pd.read_csv("data.csv") df = raw_data[['Points_0','Points_1','Points_2', 'T']] df = df.rename(columns={'Points_0': 'X', 'Points_1': 'Y', 'Points_2': 'Z'}) # 筛选直线上的点 line_df = df[(abs(df['Y'] - target_y) < tolerance) & (abs(df['Z'] - target_z) < tolerance)] # 按X坐标排序,保证路径顺序 line_df = line_df.sort_values(by='X').reset_index(drop=True) # 绘制温度分布曲线 plt.figure(figsize=(10,6)) plt.plot(line_df['X'], line_df['T'], marker='o', linestyle='-', color='b') plt.xlabel('X坐标') plt.ylabel('温度T') plt.title('中心直线上的温度分布') plt.grid(True) plt.show() # 输出结果数据 print("直线上的温度分布数据:") print(line_df[['X', 'T']])
关键说明
- 坐标筛选:用绝对值差小于容差的条件,避免因模拟数据的浮点精度问题漏选点;
- 排序处理:按X坐标排序后,数据顺序与直线路径方向一致,保证曲线的正确性;
- 可视化:通过matplotlib绘制温度随X坐标变化的曲线,直观展示温度分布趋势。
内容的提问来源于stack exchange,提问作者efirvida
相关产品推荐
相关产品推荐

