Подтвердить что ты не робот

Чтение файла .vtk с помощью python

Мне предоставлен файл vtk для устаревшего формата (я думаю, что это неструктурированная сетка), и я бы хотел прочитать его с помощью python и вывести файл .npy, так как я знаю, как с этим справиться.

Файл представляет собой дамп от ATHENA, а также плотность, скорость, магнитное поле вместе с координатами.

Я очень процедурный программист, поэтому все эти объекты запутывают...

4b9b3361

Ответ 1

Вот решение, которое я придумал, трюк включал 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')

Ответ 2

Вы пытались использовать paraview? (http://www.paraview.org/) Он может дать вам визуальное представление о том, что происходит за кулисами, и может выводить файл несколькими способами. Я бы предложил это, так как я не знаю, каковы ваши данные. http://www.vtk.org/Wiki/VTK/Examples/Python может также иметь пример, который может соответствовать вашему счету. Лично у меня была бы игра с паравью и оттуда.

Ответ 3

Здесь script, который считывает многоугольные данные в массивы numpy из файла VTK с помощью SDK PKTK VTK:

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

Ответ 4

Следует отметить, что в своем последнем выпуске проект yt http://yt-project.org/ включает поддержку ATHENA, что означает, что это обязательно является способом анализа данных моделирования с использованием python.

Ответ 5

meshio (мой проект) знает формат VTK, поэтому вы можете просто

pip install meshio

а затем

import meshio
points, cells, point_data, cell_data, field_data = meshio.read('file.vtk')