在Python中比较两个2-D元组和numpy

时间:2017-04-22 18:49:41

标签: python arrays opencv numpy tuples

我有两个嵌套的元组名为 coord coord2 我想知道第一个元组中的一组坐标是否与另一个元组中的另一个坐标相匹配索引。

例如,

coord[0][1] = 127,
coord[0][2] = 128,
coord[0] = 127,128,129....
coord[1][0] = 302,
coord[1] = 302,303,304 ....

现在我可以看到每个索引是否与其他元组的索引完全匹配,但不知道另一个索引是否存在一个集合。这是我的代码:

for i in range(60):
if (coord[0][i]) == (coord2[0][i]) and (coord[1][i]) == (coord2[1][i]):
    print(coord[0][i])
    print(coord[1][i])
    count += 1
    total += 1
else:
    total += 1

我应该怎么做呢?我很擅长在python中使用numpy数组

我写了一些像这样的新代码,

for i in range(60):
    if coord2[0][i] and coord2[1][i] in coord:
        count += 1
        total += 1
    else:
        total += 1

在我看来,这应该告诉我第二个元组中的任何坐标是否在第一个中。但我遇到一个错误,说错误,ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

2 个答案:

答案 0 :(得分:0)

实际上想通了。

for i in range(200):
    if (coord2[0][i]) in coord[0] and coord2[1][i] in coord[1]:
        count += 1
        total += 1
    else:
        total += 1

答案 1 :(得分:0)

如果您只是想知道一个矩阵的任何坐标是否存在于另一个矩阵中,那么这是一种方法。

import itertools
import numpy

首先让我们获得矩阵的所有可能的索引组合

idx = tuple(e for e in itertools.product(range(len(coord)), repeat=2))

((0, 0),
 (0, 1),
 (0, 2),
 (0, 3),
 (1, 0),
 (1, 1),
 (1, 2),
 (1, 3),
 (2, 0),
 (2, 1),
 (2, 2),
 (2, 3),
 (3, 0),
 (3, 1),
 (3, 2),
 (3, 3))

然后让我们比较两个索引矩阵,看看另一个是否存在任何一个

coord = np.arange(16).reshape(4,4)

coord1 = np.random.randint(1, size=(4,4))

np.equal([coord[_idx] for _idx in idx],[coord1[_idx] for _idx in idx])

array([ True, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False], dtype=bool)

编辑:如果您只想要出现次数,那么它就变成了这个

np.sum(np.equal([coord[_idx] for _idx in idx],[coord1[_idx] for _idx in idx]))

>>1