2012-07-30 179 views
13

私は古い形式のvtkファイル(私はその構造化されていないグリッドだと思います)を与えられています。私は知っているので、代わりに.pyファイルを読み込み、.npyファイルを出力したいと思います。それに対処する方法。Pythonで.vtkファイルを読む

ファイルはATHENAのダンプファイルで、密度、速度、磁場が座標とともに表示されます。

私は非常に多くの手続きのプログラマーですので、すべてのこれらのオブジェクトは混乱している...

+3

あなたは、このファイルのデータのサンプルを投稿できることができるように? –

+0

書き込み用に[PyEVTK](https://bitbucket.org/pauloh/pyevtk)がありますが、読み込みをサポートしていません – jterrace

+0

ああ、jterraceのリンクから、バイナリ形式だと分かります。ブリー。 –

答えて

4

は、あなたがあるParaViewを使用してみましたか? (http://www.paraview.org/)舞台裏で何が起こっているのかを視覚的に把握し、さまざまな方法でファイルを出力することができます。あなたのデータが何であるかという手がかりがないので、私はこれを提案します。 http://www.vtk.org/Wiki/VTK/Examples/Pythonにも請求書に合うかもしれない例があります。個人的には、私はパラボラと遊びをしてそこから行くだろう。ここで

+1

私は以前にparaviewを使っていましたが、それはVISITと呼ばれていました。しかし、私はファイル内の内容を分析し、fftなどの作業を行う必要があるため、視覚化するだけでは十分ではありません。 –

4

は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 
+0

vtkPolyDataReaderの代わりにvtkDataSetReader()を使用してGetOutput()ステージにアクセスできましたが、情報を取得する方法についてはまだ混乱しています。 GetNumberOfPointsとGetNumberOfCellsは、配列がどれくらい大きくなければならないと思うかわかりますが、すべての変数を引き出す方法はまだ分かりません。 vtkに正確に何が含まれているか、どのような形式で情報を取得する方法はありますか?理解できる方法で? –

+0

http://people.sc.fsu.edu/~jburkardt/data/vtk/vtk.htmlのファイルをここで選択すると、その形式を抽出するのに役立ちます。非常に多くの異なるフォーマットがあります。 – jterrace

+0

reader.IsFileStructuredPoints()は1を返します。他のオプションは0を返します。したがって、私は手足の外に出て、Structured Pointsの従来のvtkを呼び出しています。 –

13

は私が思いついた解決策である、トリックは)(ReadAllVectorsOnオンにされました。

import numpy 
from vtk import vtkStructuredPointsReader 
from vtk.util import numpy_support as VN 

reader = vtkStructuredPointsReader() 
reader.SetFileName(filename) 
reader.ReadAllVectorsOn() 
reader.ReadAllScalarsOn() 
reader.Update() 

data = reader.GetOutput() 

dim = data.GetDimensions() 
vec = list(dim) 
vec = [i-1 for i in dim] 
vec.append(3) 

u = VN.vtk_to_numpy(data.GetCellData().GetArray('velocity')) 
b = VN.vtk_to_numpy(data.GetCellData().GetArray('cell_centered_B')) 

u = u.reshape(vec,order='F') 
b = b.reshape(vec,order='F') 

x = zeros(data.GetNumberOfPoints()) 
y = zeros(data.GetNumberOfPoints()) 
z = zeros(data.GetNumberOfPoints()) 

for i in range(data.GetNumberOfPoints()): 
     x[i],y[i],z[i] = data.GetPoint(i) 

x = x.reshape(dim,order='F') 
y = y.reshape(dim,order='F') 
z = z.reshape(dim,order='F') 
4

その最新のリリースでは、YTプロジェクトhttp://yt-project.org/は、すべての手段によって、これはパイソンを使用したシミュレーションデータを分析するための方法であることを意味し、ATHENAのサポートが含まれていることを言及しなければなりません。

2

meshio(私のプロジェクト)VTKフォーマットを知っている、あなたは、単に

pip install meshio 

、その後

import meshio 
points, cells, point_data, cell_data, field_data = meshio.read('file.vtk') 
関連する問題