【冰糖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 操作;

【冰糖Python】numpy 差集、异或集、并集、交集 setdiff1d() setxor1d() union1d() intersect1d()_第1张图片

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;

【冰糖Python】numpy 差集、异或集、并集、交集 setdiff1d() setxor1d() union1d() intersect1d()_第2张图片

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 里的下标;

【冰糖Python】numpy 差集、异或集、并集、交集 setdiff1d() setxor1d() union1d() intersect1d()_第3张图片

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;

【冰糖Python】numpy 差集、异或集、并集、交集 setdiff1d() setxor1d() union1d() intersect1d()_第4张图片

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

【冰糖Python】numpy 差集、异或集、并集、交集 setdiff1d() setxor1d() union1d() intersect1d()_第5张图片

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

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

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

【冰糖Python】numpy 差集、异或集、并集、交集 setdiff1d() setxor1d() union1d() intersect1d()_第6张图片

【冰糖Python】numpy 差集、异或集、并集、交集 setdiff1d() setxor1d() union1d() intersect1d()_第7张图片

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

你可能感兴趣的:(Numpy,Python,python,numpy)