如何使用pyvtk将三维向量场从numpy数组导出到*.vtk文件?

2024-09-27 00:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力将一些3D向量数组(numpyarrays)从python导出到一个*.vtk文件,以便以后在ParaView中使用。在

我有三个三维MR测速图像,每个100x100x200体素包含x,y和z的速度分量。我想要的是使用here中的pyvtk模块将这个向量场导出到*.vtk文件。在

不幸的是,我不明白它是怎么工作的

我目前所做的努力:

from pyvtk import *

vectors = [flow['vx'], flow['vy'], flow['vz']]

dim=flow['vx'].shape

pointdata=PointData(Vectors([flow['vx'],flow['vy'],flow['vz']]))

vtk=VtkData(StructuredPoints(dim[0],dim[1],dim[2]), pointdata)

其中flow['…']包含向量分量。我得到了以下错误:

^{pr2}$

是的,它想告诉我什么?好吧,猜猜尺寸不匹配之类的问题,但如何正确设置输入?在

任何帮助都将不胜感激。提前谢谢


Tags: 文件数组flow向量分量mrvtkdim
1条回答
网友
1楼 · 发布于 2024-09-27 00:15:13

我为我的问题找到了一个合适的解决方案,用TVTK代替PyVTK。因此,每个感兴趣的人,可能的解决方法如下:

from tvtk.api import tvtk, write_data
# Unpack velocity information

vx=flow['vx']
vy=flow['vy']
vz=flow['vz']

dim=vx.shape

# Generate the grid
xx,yy,zz=np.mgrid[0:dim[0],0:dim[1],0:dim[2]]
pts = empty(vx.shape + (3,), dtype=int)
pts[..., 0] = xx
pts[..., 1] = yy
pts[..., 2] = zz

vectors = empty(vx.shape + (3,), dtype=float)
vectors[..., 0] = vx
vectors[..., 1] = vy
vectors[..., 2] = vz

# We reorder the points and vectors so this is as per VTK's
# requirement of x first, y next and z last.
pts = pts.transpose(2, 1, 0, 3).copy()
pts.shape = pts.size // 3, 3

vectors = vectors.transpose(2, 1, 0, 3).copy()
vectors.shape = vectors.size // 3, 3

sg = tvtk.StructuredGrid(dimensions=xx.shape, points=pts)

sg.point_data.vectors = vectors
sg.point_data.vectors.name = 'velocity'

write_data(sg, 'vtktest.vtk')

你好

普塔根

相关问题 更多 >

    热门问题