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

如何使用pyvista向VTU文件添加点数据并保存?

用PyVista为VTU文件添加点数据的两种方案

方案一:直接加载VTU并添加新点数据(推荐)

PyVista提供了add_point_data方法,专门用于给网格添加点属性数据,这是最直接高效的方式,无需修改原有数据结构:

import pyvista as pv
import numpy as np

# 加载目标VTU文件
mesh = pv.read("your_input_file.vtu")

# 替换为你生成的9列点数据,确保形状为 (网格点数, 9)
# 示例:生成随机测试数据
new_point_data = np.random.rand(mesh.n_points, 9)

# 两种添加方式可选:
# 1. 将9列数据作为一个多分量点字段添加
mesh.add_point_data(new_point_data, name="MultiComponent_New_Fields")

# 2. 将9列拆分为9个独立的单分量点字段
for idx in range(9):
    mesh.add_point_data(new_point_data[:, idx], name=f"New_Point_Field_{idx+1}")

# 保存修改后的VTU文件
mesh.save("output_with_new_points.vtu")

说明:

  • add_point_data是PyVista网格对象的原生方法,专门用于添加点级属性,和你之前用到的add_field_data(用于全局场数据)完全不同。
  • 确保新数据的点数和网格的点数严格一致,否则会报错。

方案二:拼接原有点数据后保存

如果需要将原有点数据和新数据拼接成一个大数组再保存,可以按以下步骤操作,但注意这种方式会丢失原有字段的名称(若需保留原字段名,更推荐方案一):

import pyvista as pv
import numpy as np

# 加载VTU文件
mesh = pv.read("your_input_file.vtu")

# 提取所有原有点数据,拼接为一个二维数组
original_point_arrays = []
for field_name in mesh.point_data.keys():
    # 将每个单分量字段转为(n,1)形状后加入列表
    original_point_arrays.append(mesh.point_data[field_name].reshape(-1, 1))
original_combined = np.hstack(original_point_arrays)

# 你的9列新点数据
new_point_data = np.random.rand(mesh.n_points, 9)

# 拼接原有数据和新数据
combined_data = np.hstack([original_combined, new_point_data])

# 将拼接后的数据添加回网格(可选两种方式)
# 1. 作为一个多分量字段添加
mesh.add_point_data(combined_data, name="Combined_All_Point_Data")

# 2. 拆分为单个字段添加(原有字段名称会丢失,仅按序号命名)
for idx in range(combined_data.shape[1]):
    mesh.add_point_data(combined_data[:, idx], name=f"Combined_Field_{idx+1}")

# 保存结果
mesh.save("combined_output.vtu")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:20:39