给定两个包含 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)
将被检测为存在于两个阵列中。
首先十分感谢!
尝试这个:
>>> 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() 构造函数将过滤掉所有重复的记录。最后,两个集合之间的 & 运算将找出两个数组中的所有坐标对。
希望能帮助到你!
这样做的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')])
一个直接的解决方案是:
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]]