首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:交集与并集

问Python:交集与并集
EN

Stack Overflow用户
提问于 2018-03-17 22:46:54
回答 3查看 10.4K关注 0票数 4

我有以下问题。我尝试计算Union上的交集,它是两个组件的重叠除以两个组件的单位单位。让我们假设component1是一个矩阵,其中第一个对象是1,component2是一个矩阵,第二个对象是1。我可以用np.logical_and(component == 1, component2 == 1)计算重叠部分。但是我怎么才能计算出工会呢?我只对连接的对象感兴趣。

代码语言:javascript
复制
import numpy as np
component1 = np.array([[0,1,1],[0,1,1],[0,1,1]])
component2 = np.array([[1,1,0],[1,1,0],[1,1,0]])
overlap = np.logical_and(component == 1, component2 == 1)
union = ?
IOU = len(overlap)/len(union)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-18 00:20:56

如果您只处理0和1,则使用布尔数组会更容易:

代码语言:javascript
复制
import numpy as np
component1 = np.array([[0,1,1],[0,1,1],[0,1,1]], dtype=bool)
component2 = np.array([[1,1,0],[1,1,0],[1,1,0]], dtype=bool)

overlap = component1*component2 # Logical AND
union = component1 + component2 # Logical OR

IOU = overlap.sum()/float(union.sum()) # Treats "True" as 1,
                                       # sums number of Trues
                                       # in overlap and union
                                       # and divides

>>> 1*overlap
array([[0, 1, 0],
       [0, 1, 0],
       [0, 1, 0]])
>>> 1*union
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
>>> IOU
0.3333333333333333
票数 9
EN

Stack Overflow用户

发布于 2021-01-26 23:21:46

Oleksii在medium中为您的问题提供了答案。

简单地说:

代码语言:javascript
复制
intersection = numpy.logical_and(result1, result2)

union = numpy.logical_or(result1, result2)

iou_score = numpy.sum(intersection) / numpy.sum(union)

print(‘IoU is %s’ % iou_score)

此外,他对此做了很好的解释。看看上面的链接。

票数 1
EN

Stack Overflow用户

发布于 2021-09-13 09:44:56

只需使用专用的numpy函数intersect1d和union1d

代码语言:javascript
复制
intersection = np.intersect1d(a, b)
union = np.union1d(a, b)
iou = intersection.shape[0] / union.shape[0]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49338166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档