用python读取.vtk文件

用python读取.vtk文件,python,vtk,Python,Vtk,我得到了一个传统格式的vtk文件(我认为它是一个非结构化网格),我想用python读入它并输出一个.npy文件,因为我知道如何处理它 该文件是来自雅典娜的转储文件,因此具有密度、速度、磁场以及坐标 我是一个非常程序化的程序员,所以所有这些对象都很混乱…你试过使用paraview吗?(http://www.paraview.org/)它可以让您直观地了解幕后发生的事情,并以多种不同的方式输出文件。我建议这样做,因为我不知道你的数据是什么样的。也可能有一个适合你的例子。就我个人而言,我想玩一玩par

我得到了一个传统格式的vtk文件(我认为它是一个非结构化网格),我想用python读入它并输出一个.npy文件,因为我知道如何处理它

该文件是来自雅典娜的转储文件,因此具有密度、速度、磁场以及坐标


我是一个非常程序化的程序员,所以所有这些对象都很混乱…

你试过使用paraview吗?(http://www.paraview.org/)它可以让您直观地了解幕后发生的事情,并以多种不同的方式输出文件。我建议这样做,因为我不知道你的数据是什么样的。也可能有一个适合你的例子。就我个人而言,我想玩一玩paraview,然后从那里开始。

下面是一个脚本,它使用VTK Python SDK将多边形数据从VTK文件读入numpy数组:

import sys

import numpy
import vtk

reader = vtk.vtkPolyDataReader()
reader.SetFileName(sys.argv[1])
reader.Update()

polydata = reader.GetOutput()

for i in range(polydata.GetNumberOfCells()):
   pts = polydata.GetCell(i).GetPoints()    
   np_pts = numpy.array([pts.GetPoint(i) for i in range(pts.GetNumberOfPoints())])
   print np_pts

这是我提出的解决方案,诀窍是启用ReadAllVectorsOn()


应该提到的是,在其最新版本中,yt项目包括对ATHENA的支持,这意味着无论如何,这是使用python分析模拟数据的方法

(我的一个项目)知道VTK格式,因此您可以

pip install meshio
然后

import meshio
mesh = meshio.read('file.vtk')
# mesh.points, mesh.cells, ...

下面是一个从旧式VTK文件读取点的简短片段:

import numpy as np
import vtk

filename = 'model.vtk'

reader = vtk.vtkGenericDataObjectReader()
reader.SetFileName(filename)
reader.Update()

points = np.array( reader.GetOutput().GetPoints().GetData() )

变量
points
是一个(N,2)或(N,3)数组,其中N是点数

你能发布这个文件的数据样本吗?有一个用于写入的,但不支持读取的,从jterrace的链接我看到它是二进制格式的。Bleh.您可能可以使用vtk.vtkPolyDataReader()阅读它,但在写入
.npy
时,我没有任何线索。我以前使用过paraview,或者更确切地说是它的一个附加组件,名为VISIT。但是,我需要分析文件中的内容,并执行fft等操作,因此仅仅可视化是不够的。我已经能够使用vtkDataSetReader()而不是vtkPolyDataReader()进入GetOutput()阶段,但我仍然对如何获取信息感到困惑。GetNumberOfPoints和GetNumberOfCells似乎为我提供了我认为数组应该有多大的合理数字,但我仍然不知道如何提取所有变量。有没有一种方法可以获得关于vtk中到底有什么以及以什么形式存在的信息?如果你在这里选择一个文件,我可以尝试帮助你提取格式。有很多不同的格式。reader.IsFileStructuredPoints()返回1,其他选项返回0,所以我冒昧地说这是结构化点的传统vtk。那么你可能想使用vtkStructuredPointsReader?我们可以使用meshio保存到.csv或.txt吗?csv和txt不是网格格式,所以不,不是现成的。您始终可以在中读取数据并将其转储。@npm坐标和字段数据可以从网格中轻松确定:坐标,数据=mesh.points,mesh.point_data[''。然后就可以很容易地将它们以您想要的任何格式写入文件
import numpy as np
import vtk

filename = 'model.vtk'

reader = vtk.vtkGenericDataObjectReader()
reader.SetFileName(filename)
reader.Update()

points = np.array( reader.GetOutput().GetPoints().GetData() )