构造集合
numpy.unique(ar, return_index = False, return_inverse = False, return_counts = False, axis = None)
对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表
- return_index=True 表示返回新列表元素在旧列表中的位置。
- return_inverse=True表示返回旧列表元素在新列表中的位置。
- return_counts=True表示返回新列表元素在旧列表中出现的次数。
x = np.array(['a', 'b', 'b', 'c', 'a'])
u, index = np.unique(x, return_index=True)
print(u) # ['a' 'b' 'c']
print(index) # [0 1 3]
print(x[index]) # ['a' 'b' 'c']
布尔运算
numpy.in1d(ar1, ar2, assume_unique=False, invert=False)
返回与ar1长度相同的布尔数组,如果ar1的元素在ar2中,则返回True,否则返回False。
invert = True时则相反,不在为True
test = np.array([0, 1, 2, 5, 0])
states = [0, 2]
mask = np.in1d(test, states, invert=True)
print(mask) # [False True False True False]
print(test[mask]) # [1 5]
两个集合的交集
numpy.intersect1d(ar1, ar2, assume_unique=False, return_indices=False)
- 求两个数组的唯一化+求交集+排序函数。
x = np.array([1, 1, 2, 3, 4])
y = np.array([2, 1, 4, 6])
xy, x_ind, y_ind = np.intersect1d(x, y, return_indices=True)
print(x_ind) # [0 2 4] 相同元素在x中的位置
print(y_ind) # [1 0 2] 相同元素在y中的位置
print(xy) # [1 2 4] 相同元素
print(x[x_ind]) # [1 2 4]
print(y[y_ind]) # [1 2 4]
#求交集
from functools import reduce
x = reduce(np.intersect1d, ([1, 3, 4, 3], [3, 1, 2, 1], [6, 3, 4, 2]))
print(x) # [3]
两个集合的并集
numpy.union1d(ar1, ar2)
reduce(numpy.union1d,(ar1, ar2, ar3)) #三个集合
两个集合的差集
numpy.setdiff1d(ar1, ar2, assume_unique = False)
返回ar1 中不存在于ar2中的元素
两个集合的异或
numpy.setxor1d(ar1, ar2, assume_unique=False)
集合的对称差,即两个集合的交集的补集。