首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从原始VTK (.vtu)文件读取数据

从原始VTK (.vtu)文件读取数据
EN

Stack Overflow用户
提问于 2019-01-05 03:32:15
回答 2查看 5.9K关注 0票数 1

我想使用Python VTK模块从.vtu文件中提取数据数组。该文件如下所示(省略了文件末尾的原始数据):

代码语言:javascript
运行
复制
<?xml version="1.0"?>
<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
  <UnstructuredGrid>
    <Piece NumberOfPoints="10471" NumberOfCells="64892">
      <PointData>
        <DataArray type="Float64" Name="potential" NumberOfComponents="1" format="appended" offset="0"/>
        <DataArray type="Float64" Name="electric field" NumberOfComponents="3" format="appended" offset="83772"/>
      </PointData>
      <CellData>
        <DataArray type="Int32" Name="GeometryIds" format="appended" offset="335080"/>
      </CellData>
      <Points>
        <DataArray type="Float64" NumberOfComponents="3" format="appended" offset="594652"/>
      </Points>
      <Cells>
        <DataArray type="Int32" Name="connectivity" format="appended" offset="845960"/>
        <DataArray type="Int32" Name="offsets" format="appended" offset="1865068"/>
        <DataArray type="Int32" Name="types" format="appended" offset="2124640"/>
      </Cells>
    </Piece>
  </UnstructuredGrid>
<AppendedData encoding="raw">

我尝试使用以下python代码提取数据:

代码语言:javascript
运行
复制
import numpy
from vtk import vtkUnstructuredGridReader
from vtk.util import numpy_support as VN

reader = vtkUnstructuredGridReader()
reader.SetFileName("charged_wire.vtu")
reader.ReadAllVectorsOn()
reader.ReadAllScalarsOn()
reader.Update()

data = reader.GetOutput()
potential = data.GetPointData().GetScalars("potential")

print(type(potential))

不幸的是,这个程序打印NoneType作为输出,我不确定为了提取potential数组中的数据存储需要做什么更改?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-07 18:51:14

您使用的读卡器不正确,这是一个.vtu文件,您必须使用vtkXMLUnstructuredGridReader

代码语言:javascript
运行
复制
import vtk.vtk

# The source file
file_name = "path/to/your/file.vtu"

# Read the source file.
reader = vtk.vtkXMLUnstructuredGridReader()
reader.SetFileName(file_name)
reader.Update()  # Needed because of GetScalarRange
output = reader.GetOutput()
potential = output.GetPointData().GetArray("potential")
票数 3
EN

Stack Overflow用户

发布于 2020-02-22 07:18:51

一种更轻量级的解决方案是使用meshio (这是我编写的)。除了numpy之外,它没有任何必需的依赖项。安装时使用

代码语言:javascript
运行
复制
pip install meshio

并使用以下命令读取文件:

代码语言:javascript
运行
复制
import meshio

mesh = meshio.read("foo.vtu")
# mesh.points, mesh.cells, mesh.point_data, ...
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54044958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档