我有一个三角形元素的网格。每个元素都有一个索引。我有一个检查邻居的功能,结果如下所示。
[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]),依此类推。
现在我需要的只是每个三角形的最大过渡值。
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, ...])
有没有办法计算?它适用于三角网格内的质量研究。我只需要“坏”(=大)数字。
答案 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]