我有一個包含多個 numpy 陣列的 numpy 陣列,每個陣列都包含一條線的兩個角節點的笛卡爾坐標,例如:
array(array([0,10,10], [10,20,20]),
array([0,10,20], [10,10,20]),
array([10,10,10], [10,20,20]),
array([10,20,20], [0,10,10]))
如何洗掉重復的節點對,如本例中的第一個和最后一個?展望應如下所示:
array(array([0,10,10], [10,20,20]),
array([0,10,20], [10,10,20]),
array([10,10,10], [10,20,20]))
這些節點是 FE-Mesh 的角節點,節點對代表網格中的所有邊。我在兩個方向(node1,node2)和(node1,node1)都有一些邊緣,但我只需要一次邊緣,所以我必須洗掉第二個。
uj5u.com熱心網友回復:
以下是一個非常基本的 O(n^2) 迭代邏輯來解決這個問題:
arr = [
[[0,10,20], [10,10,20]],
[[0,10,10], [10,20,20]],
[[10,20,20], [0,10,10]],
[[10,10,10], [10,20,20]],
]
for i in range(len(arr)-1, 0, -1):
duplicate_found = False
for j in range(i-1, -1, -1):
if (arr[i][0] == arr[j][0] and arr[i][1] == arr[j][1]) or (arr[i][0] == arr[j][1] and arr[i][1] == arr[j][0]):
duplicate_found = True
break
if duplicate_found:
del arr[i]
print(arr)
>> [[[0, 10, 20], [10, 10, 20]],
>> [[0, 10, 10], [10, 20, 20]],
>> [[10, 10, 10], [10, 20, 20]]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516050.html
標籤:Python数组麻木的
