我在 Paraview 中加载的 VTI 文件有一个名为
MyVelocity
的 3D 数据数组。我想创建一个新的速度向量,如下所示:
unew = -u
vnew = -v
wnew = w
我正在尝试使用
Programmable Filter
来创建这个数组。
import numpy
u=inputs[0].PointData["MyVelocity"][:,0]
v=inputs[0].PointData["MyVelocity"][:,1]
w=inputs[0].PointData["MyVelocity"][:,2]
output.PointData.append([-u,-v,w], "vector")
但是,我遇到了以下错误。
Traceback (most recent call last):
File "<string>", line 22, in <module>
File "<string>", line 7, in RequestData
File "C:\Program Files\ParaView 5.13.0\bin\Lib\site-packages\vtkmodules\numpy_interface\dataset_adapter.py", line 763, in append
arr = numpyTovtkDataArray(copy, name)
File "C:\Program Files\ParaView 5.13.0\bin\Lib\site-packages\vtkmodules\numpy_interface\dataset_adapter.py", line 146, in numpyTovtkDataArray
vtkarray = numpy_support.numpy_to_vtk(array, array_type=array_type)
File "C:\Program Files\ParaView 5.13.0\bin\Lib\site-packages\vtkmodules\util\numpy_support.py", line 146, in numpy_to_vtk
vtk_typecode = get_vtk_array_type(z.dtype)
File "C:\Program Files\ParaView 5.13.0\bin\Lib\site-packages\vtkmodules\util\numpy_support.py", line 69, in get_vtk_array_type
raise TypeError(
TypeError: Could not find a suitable VTK type for object
这是创建新 3D 矢量的正确方法吗?
append
的第一个参数应该是一个numpy数组,而不是一个列表。
我想你可以使用make_vector(-u, -v, w)
。
此外,对于这种操作,您还可以使用
Python Calculator
过滤器(和 multinline
表达式)
u = MyVelocity[:,0]
v = MyVelocity[:,1]
w = MyVelocity[:,2]
outputArray=make_vector((-u, -v, w))
return outputArray
文档中的一些细节:
https://docs.paraview.org/en/latest/ReferenceManual/vtkNumPyIntegration.html
https://docs.paraview.org/en/latest/UsersGuide/filteringData.html#python-calculator