在python中读取ascii vtk文件并将其转换为numpy数组

时间:2012-09-28 02:47:37

标签: python numpy vtk

我有一个包含UNSTRUCTURED POINTS数据集的vtk文件。它内部有几个数据集(字段,电流,密度)。

我想在python中加载这个文件,并将每个数据集转换为numpy数组,用matplotlib绘制它。怎么做?

2 个答案:

答案 0 :(得分:4)

如果没有您的文件示例,很难给出准确的答案。但根据我对vtk文件的了解,它们可以在4行标题后包含ASCII或二进制数据。

如果vtk中的数据是ASCII,那么

np.loadtxt(filename, skiplines=4)

应该有效。同样,如果你有许多不同的字段,你的文件结构可能会变得棘手。

如果数据是二进制的,则需要使用类似

的内容
filename.read()
struct.unpack()

np.fromfile() 

答案 1 :(得分:0)

解决方案由VTK包中的 vtk_to_numpy 函数提供。它在Vtk网格阅读器中使用,具体取决于网格格式(结构化或非结构化): vtkXMLUnstructuredGridReader 是您的理想选择。

示例代码如下:

from vtk import *
from vtk.util.numpy_support import vtk_to_numpy

# load a vtk file as input
reader = vtk.vtkXMLUnstructuredGridReader()
reader.SetFileName("my_input_data.vtk")
reader.Update()

#The "Temperature" field is the third scalar in my vtk file
temperature_vtk_array = reader.GetOutput().GetPointData().GetArray(3)

#Get the coordinates of the nodes and their temperatures
nodes_nummpy_array = vtk_to_numpy(nodes_vtk_array)
temperature_numpy_array = vtk_to_numpy(temperature_vtk_array)

x,y,z= nodes_nummpy_array[:,0] , 
       nodes_nummpy_array[:,1] , 
       nodes_nummpy_array[:,2]


(...continue with matplotlib)

可以在此主题中找到带有matplotib绘图的较长版本:VTK to Maplotlib using Numpy