当我开始用VTK为一些数据可视化建立一些基本的三维可视化的绘图方法时,我遇到了以下问题。
我的数据集通常大小为200e6-1000e6个数据点(传感器值)及其相应的坐标、点(X、Y、Z)。 我的可视化方法运行良好,但至少有一个瓶颈。除了代码的其他部分,有2个for循环的schown例子是整个方法中最耗时的部分。
我对通过foor循环向VTK对象添加坐标(点,numpy(n,3))和传感器值(强度,numpy(n,1))感到不满意。
特殊代码的例子。
vtkpoints = vtk.vtkPoints() # https://vtk.org/doc/nightly/html/classvtkPoints.html
vtkpoints.SetNumberOfPoints(self.points.shape[0])
# Bottleneck - Faster way?
self.start = time.time()
for i in range(self.points.shape[0]):
vtkpoints.SetPoint(i, self.points[i])
self.vtkpoly = vtk.vtkPolyData() # https://vtk.org/doc/nightly/html/classvtkPolyData.html
self.vtkpoly.SetPoints(vtkpoints)
self.elapsed_time_normal = (time.time() - self.start)
print(f" AddPoints took : {self.elapsed_time_normal}")
# Bottleneck - Faster way?
vtkcells = vtk.vtkCellArray() # https://vtk.org/doc/nightly/html/classvtkCellArray.html
self.start = time.time()
for i in range(self.points.shape[0]):
vtkcells.InsertNextCell(1)
vtkcells.InsertCellPoint(i)
map(vtkcells.InsertNextCell(1),self.points)
self.elapsed_time_normal = (time.time() - self.start)
print(f" AddCells took : {self.elapsed_time_normal}")
# Inserts Cells to vtkpoly
self.vtkpoly.SetVerts(vtkcells)
Times:
Convert DataFrame took: 6.499739646911621
AddPoints took : 58.41245102882385b
AddCells took : 48.29743027687073
LookUpTable took : 0.7522616386413574
所有的输入数据都是int类型的,基本是通过numpy_to_vtk方法将Dataframe转换为vtknumpy对象。
我很高兴,如果有人有办法加快这个速度。