【发布时间】:2018-11-19 06:34:03
【问题描述】:
我有两个形状为 arr1=(~140000, 3) 和 arr2=(~450000, 10) 的 numpy 数组。对于两个数组,每行的前 3 个元素是坐标 (z,y,x)。我想找到与 arr1 坐标相同的 arr2 行(可以认为是 arr2 的子组)。
例如:
arr1 = [[1,2,3],[1,2,5],[1,7,8],[5,6,7]]
arr2 = [[1,2,3,7,66,4,3,44,8,9],[1,3,9,6,7,8,3,4,5,2],[1,5,8,68,7,8,13,4,53,2],[5,6,7,6,67,8,63,4,5,20], ...]
我想找到共同的坐标(相同的前 3 个元素):
list_arr = [[1,2,3,7,66,4,3,44,8,9], [5,6,7,6,67,8,63,4,5,20], ...]
目前我正在做这个双循环,非常慢:
list_arr=[]
for i in arr1:
for j in arr2:
if i[0]==j[0] and i[1]==j[1] and i[2]==j[2]:
list_arr.append (j)
我还尝试创建(在第一个循环之后)arr2 的子数组,根据 i[0] 的值对其进行过滤(arr2_filt = [el for el in arr2 if el[0]==i[0]) .这个速度有点操作,但还是很慢。
你能帮我解决这个问题吗?
【问题讨论】:
-
您能否提供一些示例输入以及您的预期结果?!更容易提供帮助。
-
我加了一个例子,你可以看看。
-
您可以像stackoverflow.com/a/53062049/4045774 一样执行此操作,但您使用 arr2[:,0:3] 创建树并检查 arr1。如果 arr2 中的点不完全一致,但在相同的小公差范围内,这也是有益的。
标签: arrays numpy numpy-ndarray