【问题标题】:Comparing Two 2-D tuples with numpy in Python在 Python 中将两个二维元组与 numpy 进行比较
【发布时间】:2017-04-22 18:49:40
【问题描述】:

我有两个嵌套元组,分别名为 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-D tuple 不清楚。元组,如列表,可以包含数字或其他列表/元组。我更喜欢术语“嵌套列表/元组”而不是 2d。 numpy 数组虽然可能是二维的。由嵌套元组组成的数组最终可能是 2d 的。无论如何,目前您正在将coord 索引为嵌套元组(或列表)。那对你有用吗?有什么问题(如果有的话)?
  • 所以我只想知道第二个元组 coord2 中的任何坐标是否在第一个元组坐标中。我已经编写了一些我认为应该完成此任务的新代码,但我遇到了错误

标签: python arrays opencv numpy tuples


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    其实想通了。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      相关资源
      最近更新 更多