Конвертировать vtkPoints в массив numpy? - PullRequest
3 голосов
/ 31 марта 2011

Я использую Mayavi2 в скрипте Python для вычисления 3d-изо-поверхностей.В результате я получаю объект vtkPoints.Теперь я хочу преобразовать этот объект vtkPoints (vtkout в примере кода ниже) в простой массив с тремя строками, содержащий все значения x, y и z.Я получаю vtkout, используя такой код:

import numpy
from enthought.mayavi import mlab
import array

randVol = numpy.random.rand(50,50,50)        # fill volume with some random potential
X, Y, Z = numpy.mgrid[0:50, 0:50, 0:50]      # grid
surf = mlab.contour3d(X, Y, Z, randVol, contours=[0.5])   # calc contour
vtkout = surf.contour.contour_filter.output.points        # get the vtkPoints object

В настоящее время я использую следующий код для извлечения точек в массив:

pointsArray = numpy.zeros((3, vtkout.number_of_points))
for n in range(vtkout.number_of_points):
    pointsArray[0,n] = vtkout[n][0]
    pointsArray[1,n] = vtkout[n][1]
    pointsArray[2,n] = vtkout[n][2]

Интересно, нет ли общегорутина делает такие преобразования для меня удобным, быстрым и безопасным способом?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

Как подтверждается комментариями к исходному сообщению, вы можете попробовать:

vtkout.to_array().T

Это прямой метод, который не требует зацикливания.

2 голосов
/ 28 октября 2016

vtk_points.to_array() у меня не сработало (to_array () не существует в обычном vtk).

Что действительно работает в моем случае, так это использование модуля numpy_support:

from vtk.util import numpy_support
as_numpy = numpy_support.vtk_to_numpy(vtk_points.GetData())
...