由于您使用的是 numpy 数组,因此您可能需要使用精美的索引:
a = np.arange(27)
indices = [0, -1]
b = a[indices] # array([0, 26])
对于 3d 案例:
vertices = [(0,0,0),(0,0,-1),(0,-1,0),(0,-1,-1),(-1,-1,-1),(-1,-1,0),(-1,0,0),(-1,0,-1)]
indices = list(zip(*vertices)) #Can store this for later use.
a = np.arange(27).reshape((3,3,3)) #dummy array for testing. Can be any shape size :)
vertex_values = a[indices].reshape((2,2,2))
我首先写下所有顶点(尽管我敢打赌有一种聪明的方法可以使用itertools
它可以让您将其扩展到 N 维......)。您指定顶点的顺序是它们在输出数组中的顺序。然后我“转置”顶点列表(使用zip
),以便所有 x 索引都在一起,所有 y 索引都在一起,等等(这就是 numpy 喜欢它的方式)。此时,您可以保存该索引数组,并在需要框角时使用它来索引您的数组。您可以轻松地将结果重塑为 2x2x2 数组(尽管我拥有的顺序可能不是您想要的顺序)。