如何在两个坐标数组中找到相同的x,y坐标?

时间:2013-04-19 00:28:42

标签: python numpy

给定两个包含x和y坐标的2D numpy数组,如何在另一个具有相同尺寸的数组中找到相同的对?

例如,我有这些数组:

array([[ 2,  1,  3,  4],
       [ 4,  3,  5, 10]])

array([[ 0,  2,  3,  4],
       [ 3,  4, 11, 10]])

我希望在两个数组中检测到对(2, 4)(4, 10)都存在。

非常感谢!

3 个答案:

答案 0 :(得分:7)

试试这个:

>>> a2 = [[ 0,  2,  3,  4],
   [ 3,  4, 11, 10]]
>>> a1 = [[ 2,  1,  3,  4],
   [ 4,  3,  5, 10]]
>>> set(zip(*a1)) & set(zip(*a2))
{(4, 10), (2, 4)}

您可以通过array.tolist()

将数组转换为列表

对于任何2D数组,也就是说,第一行代表X轴,第二行代表Y轴。因此zip(* a1)将导致所有坐标对。然后set()构造函数将过滤掉所有重复记录。最后,&两个数组之间的操作将计算出两个数组中的所有坐标对。

希望它有所帮助!

答案 1 :(得分:3)

numpythonic 这样做的方法如下:

>>> a1 = np.array([[2, 1, 3, 4], [4, 3, 5, 10]])
>>> a2 = np.array([[0, 2, 3, 4], [3, 4, 11, 10]])
>>> a1 = a1.T.copy().view([('', a1.dtype)]*2)
>>> a2 = a2.T.copy().view([('', a2.dtype)]*2)
>>> np.intersect1d(a1, a2)
array([(2, 4), (4, 10)], 
      dtype=[('f0', '<i4'), ('f1', '<i4')])

答案 2 :(得分:0)

直接解决方案是:

import numpy

array1 = numpy.array([[ 1, 99, 2, 400],
                      [ 3, 98, 4, 401]])

array2 = numpy.array([[ 1,  6, 99,   7],
                      [ 8,  9, 98, 401]])

result = []
for column_1 in xrange(array1.shape[1]):
    for column_2 in xrange(array2.shape[1]):
        if numpy.array_equal(array1[:,column_1], array2[:,column_2]):
            result.append(array1[:,column_1])

print numpy.array(result).transpose()

[[99]
 [98]]