【冰糖Python】numpy 差集、异或集、并集、交集 setdiff1d() setxor1d() union1d() intersect1d()

numpy 中有以下类似 set 集合的操作:

差集 setdiff1d(),异或集 setxor1d(),并集 union1d(),交集 intersect1d(),以及判断是否存在的 in1d() 和 isin() 

(前五个函数名称中包含数字1)

1、numpy.setdiff1d(array1, array2, assume_unique=False) 

功能:用于获得 array1 和 array2 的差集,返回在 array1 中但不在 array2 中的值;

实现:将 array1 和 array2 扁平化到1维后判断 array2 元素是否在 array1 中 再取反

assume_unique 默认 False,假定输入值不是唯一的,会先分别对 array1 和 array2 执行一个 unique 操作,而且 unique 的结果本身就是排序后的;

assume_unique 为 True 时,假定输入值是唯一的,不会先对 array1 和 array2 执行 unique 操作;

2、numpy.setxor1d(array1, array2, assume_unique=False) 

功能:用于获得 array1 和 array2 的 异或元素,即仅存在于一个 array 中的值,结果是排序后的;

实现:该函数通过将 array1 和 array2 合并为一个 array,升序排序后判断相邻元素是否相同以保留异或集;

assume_unique 默认 False,假定输入值不是唯一的,会先分别对 array1 和 array2 执行一个 unique 操作;

assume_unique 为 True 时,假定输入值是唯一的,不会先对 array1 和 array2 执行 unique 操作,此时如果其中一个 array 中有重复值,该重复值会在 array 合并后被认为是“存在于两个 array 的重复值”的而被去掉,但确实是仅存在于一个 array 的重复值,结果会有问题(见下图),所以 assume_unique 一般应设为 False;

3、numpy.union1d(array1, array2)

功能:用于获得 array1 和 array2 的 并集,结果是排序后且去重的;

实现:该函数通过将 array1 和 array2 合并为一个 array,再使用 unique 进行操作;

4、numpy.intersect1d(array1, array2, assume_unique=False, return_indices=False)

功能:用于获得 array1 和 array2 的 交集,结果是排序后的;

实现:该函数通过将 array1 和 array2 合并为一个 array,排序后求交集;

assume_unique 默认 False,假定输入值不是唯一的,会先分别对 array1 和 array2 执行一个 unique 操作;

assume_unique 为 True 时,假定输入值是唯一的,不会先对 array1 和 array2 执行 unique 操作,此时如果其中一个 array 中有重复值,该重复值会在 array 合并后被认为是“存在于两个 array 的共有值”的而被留下,但确实是仅存在于一个 array 的重复值,结果会有问题(见下图),所以 assume_unique 一般应设为 False;

return_indices 默认 False,不获取交集下标;return_indices 为 True 时,返回交集在两个 array 里的下标;

5、numpy.in1d(array1, array2, assume_unique=False, invert=False)

功能:判断 array1 中元素是否存在于 array2 中,存在返回 True,不存在返回 False,结果形状为一维 array;

实现:array1 和 array2 如果不是 array 则会被转换为 array ;该函数通过将 array1 和 array2 

assume_unique 默认 False,假定输入值不是唯一的,会先分别对 array1 和 array2 执行一个 unique 操作;

assume_unique 为 True 时,假定输入值是唯一的,不会先对 array1 和 array2 执行 unique 操作;

invert 默认 False,表示正常返回 True/False 结果,即 array1 中元素存在于 array2 中为 True,不存在为 False; 

invert 为 True 返回 True/False 取反后的结果,即 array1 中元素存在于 array2 中为 False,不存在为 True;

如果 array2 是个 set,则 array2 会被转换为一个 object array,而不是包含 array2 元素的 array,所以 array2 不应为 set;

6、numpy.isin(array1, array2, assume_unique=False, invert=False)

功能:判断 array1 中元素是否存在于 array2 中,存在返回 True,不存在返回 False,结果形状与 array1 一致;

实现:numpy.isin() 调用了 numpy.in1d(),不过 isin() 额外使用了 reshape(),建议使用 isin();

注:更多内容参照官方文档

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冰糖不在家

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值