获得每个邻居三角形的最大值

时间:2017-06-11 22:32:50

标签: python numpy mesh

我有一个三角形元素的网格。每个元素都有一个索引。我有一个检查邻居的功能,结果如下所示。

[1,2]例如意味着,三角形1和三角形2是邻居,与三角形1和三角形4相同。

Adjacent_Elements = ([[1, 2], [1, 4], [2, 5], [4, 3], [3, 5] ... ])

现在我检查从一个元素到他的邻居的大小变化。数字表示尺寸比率的变化。

例如:对于第一对[1,2],我得到过渡值1,这意味着它们具有相同的大小。对于下一对[1,4],我得到值3,这意味着从元素1到元素4的大小变化是因子3.对于对[2,5],我得到值2,这意味着,大小的变化是因子2。 数组Element_Transition包含所有这些值。每对都有一个值。

Element_Transition = ([1, 3, 2, 1, 1.5, ...])

每个三角形至少有1个和最多3个邻居,所以每个三角形得到1-3个值。在这个例子中,三角形1的大小改变了因子1(在[1,2])以及因子3(在[1,4]),依此类推。

以下是示例图片:Element Transition Factors

现在我需要的只是每个三角形的最大过渡值。

All_Trans_Values = ([[1, [1, 3]], [2, [1, 2], [3, [1, 1.5],...])
Max_Trans_Value = ([[1, 3], [2, 2], [3, 1.5], [4, 3]....])
                     ^       ^       ^         ^
                     ^       ^       ^         ^
                    these are the pairs from Adjacent_Elements
                    the second number is always the maximum transition value

或只是值

Value = ([3, 2, 1.5, 3, ...])

有没有办法计算?它适用于三角网格内的质量研究。我只需要“坏”(=大)数字。

1 个答案:

答案 0 :(得分:1)

我更了解编辑后的问题,所以旧的答案只是解决问题的一部分。最初我认为你已经将值排序为三角形。

新答案:

这应该做你想要的。

Adjacent_Elements = np.array([[1,3],[1,4],[2,3],[3,4]])
Element_Transition = np.array([2,1,4,2])

# maybe you know the amount of triangles already
number_of_triangles = max(Adjacent_Elements.flatten())

# generating list of indexes
indexes = np.arange(1,number_of_triangles+1)
# generating list of zeros
zeros = np.zeros((number_of_triangles))
Max_Trans_Value = np.stack((indexes,zeros),axis=-1)

# iterating over all Adjacent_Elements with corresponding factor
for triangles,factor in zip(Adjacent_Elements,Element_Transition):
    for triangle in triangles:
        # if the factor is heigher than the currently stored one
        if factor >= Max_Trans_Value[triangle-1,1]:
            Max_Trans_Value[triangle-1,1] = factor

print(Max_Trans_Value)
# will print:
#  [[1 2],
#   [2 4],
#   [3 4],
#   [4 2]]

旧回答:

我想您希望All_Trans_Values的每个子列表都有最大值。

我会使用列表理解和max()函数中的构建。

a = [[1,1,3],[2,3],[1,2,2]]
c = [max(b) for b in a]

c现在将包含所有最大值。 [3,3,2]