获取每个相邻三角形的最大值
Get the maximum value for each neighboured triangle
我有一个带有三角形元素的网格。每个元素都有一个索引。我有一个检查邻居的功能,结果如下所示。
例如 [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, ...])
有办法计算吗?它用于三角网格内部的质量研究。我只需要 "bad"(= 大)数字。
编辑后我更了解你的问题,所以旧答案只是解决你问题的一部分。本来我以为你已经把值排序到三角形了。
新答案:
这应该可以满足您的要求。
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]
我有一个带有三角形元素的网格。每个元素都有一个索引。我有一个检查邻居的功能,结果如下所示。
例如[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, ...])
有办法计算吗?它用于三角网格内部的质量研究。我只需要 "bad"(= 大)数字。
编辑后我更了解你的问题,所以旧答案只是解决你问题的一部分。本来我以为你已经把值排序到三角形了。
新答案:
这应该可以满足您的要求。
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]