Python 如何在两个坐标数组中找到相同的x,y坐标?
给定两个包含x和y坐标的2D numpy数组,如何在另一个具有相同尺寸的数组中找到相同的对 例如,我有以下阵列: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],
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'