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

Python 如何在两个坐标数组中找到相同的x,y坐标?,python,numpy,Python,Numpy,给定两个包含x和y坐标的2D numpy数组,如何在另一个具有相同尺寸的数组中找到相同的对 例如,我有以下阵列: array([[ 2, 1, 3, 4], [ 4, 3, 5, 10]]) 及 我希望发现(2,4)和(4,10)对都会被检测到存在于这两个数组中 非常感谢 试试这个: >>> a2 = [[ 0, 2, 3, 4], [ 3, 4, 11, 10]] >>> a1 = [[ 2, 1, 3, 4],

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

例如,我有以下阵列:

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

我希望发现
(2,4)
(4,10)
对都会被检测到存在于这两个数组中

非常感谢

试试这个:

>>> 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)}
可以将数组按数组排列。tolist()

对于任何二维阵列,第一行表示X轴,第二行表示Y轴。因此zip(*a1)将生成所有坐标对。然后set()构造函数将过滤掉所有重复记录。最后,两个集合之间的&运算将计算出两个数组中的所有坐标对

希望有帮助

试试这个:

>>> 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)}
可以将数组按数组排列。tolist()

对于任何二维阵列,第一行表示X轴,第二行表示Y轴。因此zip(*a1)将生成所有坐标对。然后set()构造函数将过滤掉所有重复记录。最后,两个集合之间的&运算将计算出两个数组中的所有坐标对


希望有帮助

直接解决方案是:

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]]

直接的解决办法是:

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]]
实现这一点的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')])
a1=np.array([[2,1,3,4],[4,3,5,10]) >>>a2=np.数组([[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.1D(a1,a2) 数组([(2,4)、(4,10)], dtype=[('f0','实现这一点的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')])
a1=np.array([[2,1,3,4],[4,3,5,10]) >>>a2=np.数组([[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.1D(a1,a2) 数组([(2,4)、(4,10)],
数据类型=[('f0',一个基本问题:坐标是定义为整数还是浮点数?@heltonbiker,它们是一个基本问题:坐标是定义为整数还是浮点数?@heltonbiker,它们是ints@heltonbiker我不这么认为。你能给我一些反例吗?我更新了一些关于它的解释。事实上它会是如果OP有话要说的话很有趣…@heltonbiker抱歉。OP是谁?有两个:(2,4)和(4,10)。我在你的测试用例上尝试了我的解决方案。它有效。OP的意思是“原始海报”;在这种情况下,blz。另外,盛,这个解决方案很好。@heltonbiker我不这么认为。你能给我一些反例吗?我更新了一些关于它的解释。事实上,如果OP有话要说的话会很有趣…@heltonbiker对不起。OP是谁?有两个:(2,4)和(4,10)。我在你的测试用例上尝试了我的解决方案。它有效。OP的意思是“原始海报”;在本例中,blz。另外,Sheng,这个解决方案很棒。打字发生了什么事?不是所有的东西都保持为
int
s吗?@heltonbiker
'打字发生了什么事?不是所有的东西都保持为
int
s吗?@heltonbiker
'