我们知道两个 set 对象之间,可以取交集、并集、差集、对称差集,举个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
s1 = { 1 , 2 , 3 } s2 = { 2 , 3 , 4 } """ &: 交集 |: 并集 -: 差集 ^: 对称差集 """ # 以下几种方式是等价的 # 但是一般我们都会使用操作符来进行处理,因为比较方便 print (s1 & s1) print (s1.intersection(s2)) print ( set .intersection(s1, s2)) """ {2, 3} {2, 3} {2, 3} """ print (s1 | s2) print (s1.union(s2)) print ( set .union(s1, s1)) """ {1, 2, 3, 4} {1, 2, 3, 4} {1, 2, 3, 4} """ print (s1 - s2, s2 - s1) print (s1.difference(s2), s2.difference(s1)) print ( set .difference(s1, s2), set .difference(s2, s1)) """ {1} {4} {1} {4} {1} {4} """ print (s1 ^ s2) print (s1.symmetric_difference(s2)) print ( set .symmetric_difference(s1, s2)) """ {1, 4} {1, 4} {1, 4} """ # 另外,我们还可以同时对多个集合操作,不仅仅是两个 print ({ 1 , 2 , 3 } & { 2 , 3 , 4 } & { 3 , 4 , 5 }) # {3} |
那么 Numpy 的数组之间,可不可以执行这些操作呢?答案是可以的,Numpy 提供了一些 API,用于数组之间的集合运算。
但需要注意,数组虽然也支持 & 等操作符,但是它们代表的意义和集合无关。
1
2
3
4
5
6
7
8
|
import numpy as np arr1 = np.array([ 1 , 2 , 3 ]) arr2 = np.array([ 2 , 3 , 4 ]) # 两个数组 & # 表示将数组里面对应的元素分别进行"按位与"操作 print (arr1 & arr2) # [0 2 0] |
所以我们需要使用 Numpy 提供的 API 进行运算。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import numpy as np arr1 = np.array([ 1 , 2 , 2 , 3 ]) arr2 = np.array([ 2 , 3 , 4 , 4 ]) # 取交集 print ( np.intersect1d(arr1, arr2) ) # [2 3] # 取并集 print ( np.union1d(arr1, arr2) ) # [1 2 3 4] # 取差集 print ( np.setdiff1d(arr1, arr2), np.setdiff1d(arr2, arr1) ) # [1] [4] # 取对称差集 print ( np.setxor1d(arr1, arr2) ) # [1 4] |
接收两个数组,返回一个数组。并且原始数组中的元素允许重复,对结果没有影响。
另外,上面的函数都只能接收两个数组,如果我们想同时对任意多个数组操作呢?很简单,使用 reduce 即可。
1
2
3
4
5
6
7
8
9
10
11
|
from functools import reduce import numpy as np arr1 = np.array([ 1 , 2 , 3 ]) arr2 = np.array([ 2 , 3 , 4 ]) arr3 = np.array([ 3 , 4 , 5 ]) print ( reduce (np.intersect1d, [arr1, arr2, arr3]) ) # [3] |
总的来说还是比较简单的。
到此这篇关于Python Numpy中数组的集合操作详解的文章就介绍到这了,更多相关Numpy数组集合操作内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://mp.weixin.qq.com/s/DCet9vqT_aV-N2LIIQ_9Og