【发布时间】:2017-09-16 15:19:07
【问题描述】:
我不知道如何全面地解释我的问题。所以我给你举个例子……
我有这个数组表示每个四边形或三角形的顶点索引:
>>> faces
array([[0, 1, 2, 3],
[4, 7, 6, 5],
[0, 4, 1, 0],
[1, 5, 6, 2],
[2, 6, 7, 3],
[4, 0, 3, 7],
[1, 4, 5, 0]])
三角形是以0结尾的元素
我想做这样的转换:
>>> faces
array([[0, 1, 2, 3], #->[[0, 1, 2], [0, 2, 3],
[4, 7, 6, 5], #-> [4, 7, 6], [4, 6, 5],
[0, 4, 1, 0], #-> [0, 4, 1],
[1, 5, 6, 2], #-> [1, 5, 6], [1, 6, 2],
[2, 6, 7, 3], #-> [2, 6, 7], [2, 7, 3],
[4, 0, 3, 7], #-> [4, 0, 3], [4, 3, 7],
[1, 4, 5, 0]]) #-> [1, 4, 5]]
那么我怎样才能有效地进行这种转换呢?
我做了一个以不同方式解决它的函数。将quads得到的tirangles放在数组的末尾。
def v_raw_to_tris(tessfaces):
len_tessfaces = len(tessfaces)
quad_indices = tessfaces[:, 3].nonzero()[0]
t3 = np.empty(((len_tessfaces + len(quad_indices)), 3), 'i4')
t3[:len_tessfaces] = tessfaces[:, :3]
t3[len_tessfaces:] = tessfaces[quad_indices][:, (0, 2, 3)]
return t3
但我不希望生成的三角形位于数组的末尾。是的,在原来的四边形前面
【问题讨论】:
-
因此,输出将具有可变数量的列表,例如第一个 elem 会有两个列表?
-
或者我们可以把它们都排成一行,总共有 12 行吗?
-
@Divakar,不。每个元素将有 3 个项目
-
让我换一种说法 - 输出数组的形状必须是什么?
-
形状为 (-1, 3)。在示例中为 (12, 3)
标签: python arrays performance numpy