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();
注:更多内容参照官方文档