用于元组和组件don'的vtk/python VTKFloatArray设置器;不通勤 问题

用于元组和组件don'的vtk/python VTKFloatArray设置器;不通勤 问题,python,vtk,Python,Vtk,下面的代码片段配置python/VTKFloatArray,以便将来使用单位立方体的顶点坐标进行填充。设置了3个组件(x、y、z)的8个元组。似乎塞特人不上下班。这是预期的行为吗?似乎必须首先设置组件的数量。有人能复制这个吗?谢谢你的回答 import vtk import numpy as np from itertools import product as itprod vertices = np.array(list(itprod([0, 1], repeat=3))) print

下面的代码片段配置python/VTKFloatArray,以便将来使用单位立方体的顶点坐标进行填充。设置了3个组件(x、y、z)的8个元组。似乎塞特人不上下班。这是预期的行为吗?似乎必须首先设置组件的数量。有人能复制这个吗?谢谢你的回答

import vtk
import numpy as np
from itertools import product as itprod

vertices = np.array(list(itprod([0, 1], repeat=3)))

print vertices.shape[0] //8 vertices
print vertices.shape[1] //3 coordinates x-y-z 

array = vtk.vtkFloatArray()
array.SetNumberOfComponents(vertices.shape[1])
array.SetNumberOfTuples(vertices.shape[0])
print array // number of tuples is 8, number of components is 3 OK

array = vtk.vtkFloatArray()
array.SetNumberOfTuples(vertices.shape[0])
array.SetNumberOfComponents(vertices.shape[1])
print array // number of tuples is 2 number of components is 3  WRONG

VTK总是变化无常的,尤其是在文档方面。我在相应的链接上找到了一些信息

前者(
SetNumberOfTuples
):

设置数组中元组(组件组)的数量

请注意,这可能会根据组件的数量分配空间。[……]

后者(
SetNumberOfComponents
):

设置/获取组件的尺寸(n)

必须大于等于1。请确保在分配前已设置此选项

在我看来,前者可以分配空间,但在分配之前必须调用后者。因此,他们确实不需要通勤,你需要先打电话给后者,这应该是工作顺序(这与你的结果一致)


链接显然不符合Python实现,但是C++版本不应该通勤,你也不应该期望Python中的交换性。

术语的次要注释:我相信你对两个操作的交换性有一个问题,所以我会说它们不通勤。我编辑这篇文章。感谢安德拉斯的回答。它符合并解释了在实践中观察到的情况。让我有点惊讶的是,前一个setter没有与缓冲区分配解耦,而后一个是!