为我的荣誉项目使用3D扫描仪,我知道重叠的数据可能会弄乱网格曲面细分。我已经获得了[[x1 y1 z1][x2 y2 z2]...[xn yn zn]]
如果给出像[[1.1 1.2 1.3][2.1 2.2 2.3][1.1 1.2 1.3]]
这样的2D列表,我想删除重复项,例如第二次出现[1.1 1.2 1.3]
。
如果可能的话,我希望能够在一定的容差范围内移除(这可能会让我更容易移除浮动,因为我听到它们很难处理)。这是因为我知道来自不同扫描仪输入的数据不会给出完全相同的值。所以在伪代码中:
if original + tolerance >= duplicate >= original - tolerance:
remove
#e.g.
original = [1.1 1.2 1.3]
duplicate = [1.2 1.2 1.3]
tolerance = 0.1
[1.2 1.3 1.4] >= [1.2 1.2 1.3] >= [1.0 1.1 1.2]
有什么想法吗?感谢您的帮助,我的大脑已经被炒了,而且我一般都是编程新手。
答案 0 :(得分:1)
使用numpy
删除重复项非常简单np.unique(x, axis=0)
其中x
是您的数组
答案 1 :(得分:0)
我说过滤条目,当从其他条目减少时,没有点通过某个阈值:
Private Sub Command111_Click()
Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Dim ssql As String
Dim labelname As String
Dim b As String
Set dbs = CurrentDb
'--------------------------------------------------------------------------- ----
labelname = "Label24"
b = [Forms]![Bal_Sheet]![& labelname &].Caption
ssql = "select sum(a.[Bal Fwd]) from Trial_Balance a,Act_Master b where a.GBOBJ = b.object and a.GBSUB = b.sub and b.Cat = " & "'" & b & "'"
Debug.Print ssql
Set rs = dbs.OpenRecordset(ssql, dbOpenDynaset)
[Forms]![Bal_Sheet]![Text1].Value = rs(0)
'-------------------------------------------------------------------------------
rs.Close
Set rs = Nothing
dbs.Close
End Sub
要返回唯一条目,请使用def subtract(pts1, pts2):
# subtract two entries:
# subtract((1.1, 1.2, 1.3), (1.2, 1.1, 1.3)) = (-0.1, 0.1, 0)
return tuple(map(operator.sub, zip(pts1, pts2)))
def is_close_enough(match, thresh=0.15):
return abs(x) <= thresh
def is_close_match(pts1, pts2):
# check if the match is close enough, create your own THRESH
distances = subtract(pts1, pts2)
return all(map(is_close_enough, distances))
def get_duplicates(original, candidates):
# given an entry and duplicate candidates, return all duplicates
# candidates.remove(original) # don't match self, not that important
_is_close_match = lambda candidate: is_close_match(original, candidate)
return filter(_is_close_match, candidates)
。
答案 2 :(得分:0)
正如所指出的,这与问题here非常相似。 出于好奇(或比我更多的知识),值得尝试这里发布的答案。
但是我发现修改链接问题的第一个答案非常有效。