【发布时间】:2015-04-08 16:04:00
【问题描述】:
我有两个包含 3d 点的不同大小的数组。我想有效地比较两个数组并找到匹配的点并最终返回一个简单数量的匹配点。
pA=[[0,0,0],[0,1,0],[1,2,4],[10,3,4],[1,20,1],[5,3,2]]
pB=[[14,1,0],[1,2,4],[1,20,1],[15,1,0]]
#returns 2
目前我有一个草率的循环来解决这个问题,但考虑到我正在尝试匹配具有大量点的多对数组,它对性能不是很友好,这是一个问题
t= np.array([pA[x]==pB for x in range(len(pA))]).sum(2)
print np.sum(t==3)
我只是不确定如何有效地比较两个不同大小的多维数组。然后是如何对大量对进行多次迭代。
编辑
找到了一种解决方法,该方法非常快,可以组合数组,制作数组的唯一版本,然后比较两个数组的长度。
pts=np.concatenate((pA,pB),axis=0)
pts2 = np.unique(pts.view([('', pts.dtype)]*pts.shape[1]))
return len(pts)-len(pts2)
【问题讨论】:
-
每个列表中会不会有重复的点?
标签: python arrays performance numpy compare