python使用numpy求两个数组的并集交集差集(图像)

本文介绍了numpy库在处理1D数组时的并集、交集和差集操作,如np.union1d、np.intersect1d和np.setdiff1d,并强调了维度和顺序的重要性。此外,还探讨了概率图的概念,特别是在分割任务中的应用,解释了交、并和概率图加权平均的操作方式,提供了相应的Python实现。
摘要由CSDN通过智能技术生成

1. 常规数组的并集、交集、差集

import numpy as np
array1=np.array([3,2,-1,100])
array2=np.array([0,-5,100,20])

"""并集"""
union=np.union1d(array1,array2)  
print(union)
> [ -5  -1   0   2   3  20 100]

"""交集"""
inter=np.intersect1d(array1,array2)  
print(inter)
> [100]

"""差集"""
diff=np.setdiff1d(array1,array2)  
print(diff)
> [-1  2  3]

diff=np.setdiff1d(array2,array1)  
print(diff)
> [-5  0 20]

"""
差集需要额外注意的一点:
函数原型:numpy.setdiff1d(ar1, ar2, assume_unique=False)
返回结果:return 1D array of values in ar1 that are not in ar2. 
返回的是ar1里有,ar2里没有的。因此,ar1和ar2的顺序会导致结果有区别
"""

注意,np.union1d函数及后续的np.intersect1dnp.setdiff1d都只支持1d的数组,如果是多维数组,需要先flatten

例如:

import numpy as np
array1=np.array([[3,2],[-1,100]])
array2=np.array([[0,-5],[100,20]])
union=np.union1d(array1.flatten(), array2.flatten())
print(union)
> [ -5  -1   0   2   3  20 100]

参考:

2. 概率图的交并差

2.1 概念说明

  • 区别于正经统计意义上的事件概率: 极速统计教程之八 | 概率和集合
  • 这里的概率图,指的是分割任务中,每个点是前景点的概率。
  • 这里的交并差(和)操作:
    • 针对对象:使用两种算法分别得到的同一个图的某个分割对象的概率图
    • 前提:假设模型训练时候是sigmoid函数,只用分割前景和背景,以0.3作为前景背景概率分割的阈值。
    • 交操作:对同一个图,使用两种算法得到的两张分割的概率图;对两个概率图逐元素比较,谁小取谁。
    • 并操作:对同一个图,使用两种算法得到的两张分割的概率图;对两个概率图逐元素比较,谁大取谁。
    • 和操作:对于ensemble来说,求两个概率图的差没什么意义,所以改成概率图的和/2。

2.2 实现

# 和
if op_type=="add":
	prob_rs=(prob1_array+prob2_array)/2
# 并
elif op_type=="union":
	prob_rs=np.where(prob1_array > prob2_array, prob1_array, prob2_array)
# 交
elif op_type=="inter":
	prob_rs=np.where(prob1_array < prob2_array, prob1_array, prob2_array)

参考:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吨吨不打野

解决了问题,觉得还行就给点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值