将3D numpy导出为VTK文件,以便在Paraview/Mayavi中查看

som*_*141 6 numpy vtk paraview

对于那些想要将简单的3D numpy数组(以及轴)导出到.vtk(或.vtr)文件以进行后期处理并在Paraview或Mayavi中显示的人,有一个名为PyEVTK的小模块就是这样做的.该模块支持结构化和非结构化数据等.不幸的是,即使代码在基于unix的系统中工作正常,我也无法在任何简单地使事情变得复杂的Windows安装上工作(不断崩溃).我联系了开发人员,但他的建议没有用

因此我的问题是:如何使用该from vtk.util import numpy_support函数将3D数组(函数本身不支持3D数组)导出到.vtk文件?有没有一种简单的方法可以在不创建vtkDatasets等的情况下完成它?

非常感谢!

som*_*141 8

这是永远的,我完全忘记了这个问题,但我最终搞清楚了.我在我的博客(PyScience)上发了一篇关于它的文章,提供了如何在NumPy和VTK之间进行转换的教程.如果感兴趣,请看看:

pyscience.wordpress.com/2014/09/06/numpy-to-vtk-converting-your-numpy-arrays-to-vtk-arrays-and-files/


Joe*_*ton 5

这不是对您问题的直接回答,但如果您有 tvtk(如果您有 mayavi,您应该拥有它),您可以使用它来将您的数据写入 vtk 格式。(参见:http : //code.enthought.com/projects/files/ETS3_API/enthought.tvtk.misc.html

它不使用PyEVTK,并且支持广泛的数据源(不仅仅是结构化和非结构化网格),因此它可能会在其他事物不适用的地方工作。

举一个简单的例子(Mayavi 的mlab界面可以让这件事变得不那么冗长,特别是如果你已经在使用它。):

import numpy as np
from enthought.tvtk.api import tvtk, write_data

data = np.random.random((10,10,10))

grid = tvtk.ImageData(spacing=(10, 5, -10), origin=(100, 350, 200), 
                      dimensions=data.shape)
grid.point_data.scalars = np.ravel(order='F')
grid.point_data.scalars.name = 'Test Data'

# Writes legacy ".vtk" format if filename ends with "vtk", otherwise
# this will write data using the newer xml-based format.
write_data(grid, 'test.vtk')
Run Code Online (Sandbox Code Playgroud)

以及输出文件的一部分:

# vtk DataFile Version 3.0
vtk output
ASCII
DATASET STRUCTURED_POINTS
DIMENSIONS 10 10 10
SPACING 10 5 -10
ORIGIN 100 350 200
POINT_DATA 1000
SCALARS Test%20Data double
LOOKUP_TABLE default
0.598189 0.228948 0.346975 0.948916 0.0109774 0.30281 0.643976 0.17398 0.374673 
0.295613 0.664072 0.307974 0.802966 0.836823 0.827732 0.895217 0.104437 0.292796 
0.604939 0.96141 0.0837524 0.498616 0.608173 0.446545 0.364019 0.222914 0.514992 
...
...
Run Code Online (Sandbox Code Playgroud)