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

如何从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']])

关键说明

  1. 坐标筛选:用绝对值差小于容差的条件,避免因模拟数据的浮点精度问题漏选点;
  2. 排序处理:按X坐标排序后,数据顺序与直线路径方向一致,保证曲线的正确性;
  3. 可视化:通过matplotlib绘制温度随X坐标变化的曲线,直观展示温度分布趋势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:35:21