给定两个包含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)
都存在。
非常感谢!
答案 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]]