1

给定两个包含 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)将被检测为存在于两个阵列中。

首先十分感谢!

4

3 回答 3

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() 将数组转换为列表

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

希望能帮助到你!

于 2013-04-19T00:33:33.193 回答
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')])
于 2013-04-19T03:51:05.113 回答
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]]
于 2013-04-19T00:35:56.007 回答