8

シンプルな 3D numpy 配列 (軸と共に) を .vtk (または .vtr) ファイルにエクスポートして後処理し、Paraview または Mayavi で表示したい場合は、まさにそれを行うPyEVTKという小さなモジュールがあります。このモジュールは、構造化データと非構造化データなどをサポートしています。残念ながら、コードは UNIX ベースのシステムでは問題なく動作しますが、どの Windows インストールでも動作させることができず (クラッシュし続け)、単純に複雑になります。私は開発者に連絡しましたが、彼の提案はうまくいきませんでした

したがって、私の質問は次のとおりです。from vtk.util import numpy_support関数を使用して 3D 配列 (関数自体は 3D 配列をサポートしていません) を .vtk ファイルにエクスポートするにはどうすればよいですか? vtkDatasetsなどを作成せずにそれを行う簡単な方法はありますか?

どうもありがとう!

4

5 に答える 5

10

それは永遠であり、私はこの質問をすることを完全に忘れていましたが、最終的にそれを理解しました. NumPy と VTK の間で変換する方法に関するチュートリアルを提供するブログ (PyScience) で、それについての投稿を書きました。興味があれば見てください:

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

于 2014-09-12T00:04:33.357 に答える
5

これはあなたの質問に対する直接的な回答ではありませんが、持っているtvtk場合 (mayavi がある場合は持っている必要があります)、それを使用してデータを vtk 形式に書き込むことができます。(参照: http://code.enthought.com/projects/files/ETS3_API/enthought.tvtk.misc.html )

を使用せずPyEVTK、(構造化グリッドと非構造化グリッドだけでなく) 幅広いデータ ソースをサポートしているため、おそらく他の機能がない場所でも機能します。

簡単な例として (特に Mayavi のmlabインターフェイスを既に使用している場合は、Mayavi のインターフェイスを使用すると、これをはるかに簡潔にすることができます)。

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')

出力ファイルの一部:

# 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 
...
...
于 2013-04-02T02:03:09.217 に答える
2

Mayavi の TVTK には、vtk ファイルを記述する美しい方法があります。これは、@Joe と tvtk のドキュメントに従って自分用に書いたテスト例です。evtk より優れている点は、ascii と html の両方をサポートしていることです。他の人の助けになることを願っています。

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

#data = np.random.random((3, 3, 3))
#
#i = tvtk.ImageData(spacing=(1, 1, 1), origin=(0, 0, 0))
#i.point_data.scalars = data.ravel()
#i.point_data.scalars.name = 'scalars'
#i.dimensions = data.shape
#
#w = tvtk.XMLImageDataWriter(input=i, file_name='spoints3d.vti')
#w.write()

points = np.array([[0,0,0], [1,0,0], [1,1,0], [0,1,0]], 'f')
(n1, n2)  = points.shape
poly_edge = np.array([[0,1,2,3]])

print n1, n2
## Scalar Data
#temperature = np.array([10., 20., 30., 40.])
#pressure = np.random.rand(n1)
#
## Vector Data
#velocity = np.random.rand(n1,n2)
#force     = np.random.rand(n1,n2)
#
##Tensor Data with 
comp = 5
stress = np.random.rand(n1,comp)
#
#print stress.shape
## The TVTK dataset.
mesh = tvtk.PolyData(points=points, polys=poly_edge)
#
## Data 0 # scalar data
#mesh.point_data.scalars = temperature
#mesh.point_data.scalars.name = 'Temperature'
#
## Data 1 # additional scalar data
#mesh.point_data.add_array(pressure)
#mesh.point_data.get_array(1).name = 'Pressure'
#mesh.update()
#
## Data 2 # Vector data
#mesh.point_data.vectors = velocity
#mesh.point_data.vectors.name = 'Velocity'
#mesh.update()
#
## Data 3 additional vector data
#mesh.point_data.add_array( force)
#mesh.point_data.get_array(3).name = 'Force'
#mesh.update()

mesh.point_data.tensors = stress
mesh.point_data.tensors.name = 'Stress'

# Data 4 additional tensor Data
#mesh.point_data.add_array(stress)
#mesh.point_data.get_array(4).name = 'Stress'
#mesh.update()

write_data(mesh, 'polydata.vtk')

# XML format 
# Method 1
#write_data(mesh, 'polydata')

# Method 2
#w = tvtk.XMLPolyDataWriter(input=mesh, file_name='polydata.vtk')
#w.write()
于 2015-06-05T05:06:46.140 に答える