numpy数组集合运算及下标操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

numpy数组集合运算及下标操作
1. 数组的集合运算
1.1. 并集
np.union1d(a,b)计算数组的并集:
In [1]: import numpy as np
In [2]: a = np.array([1,2,3])
In [3]: b = np.array([3,4,5])
In [4]: np.union1d(a,b)
Out[4]: array([1, 2, 3, 4, 5])
1.2. 交集
np.intersect1d(a,b)计算数组的交集:
In [10]: import numpy as np
In [11]: a = np.array([2,3,4,5])
In [12]: b = np.array([3,5,6])
In [13]: np.intersect1d(a,b)
Out[13]: array([3, 5])
1.3. 差集
np.setdiff1d(a,b)计算结果为a集合减去b集合,也就是剩下没有在b中出现的元素:
In [15]: import numpy as np
In [16]: a = [1,1,2,2,3,4,5]
In [17]: b = [2,5]
In [18]: np.setdiff1d(a,b)
Out[18]: array([1, 3, 4])
1.4. 异或
np.setxor1d(a,b)计算a、b集合的异或结果。

In [15]: import numpy as np
In [16]: a = [1,1,2,2,3,4,5]
In [17]: b = [2,5]
In [26]: np.setxor1d(a,b)
Out[26]: array([1, 3, 4])
可以注意到,⼀般对两个数组进⾏集合操作,会对数组⾃动进⾏去重。

2. np.where函数
2.1. 第⼀种⽤法
where(c, a, b),是numpy风格的if-else三元运算符。

它通过⼀个布尔数组(c)和两个其他数组(a和b)得出数组d,数组d满⾜:如果c[i]为真,则d[i]=a[i],否则d[i]=b[i]。

三个数组必须具有相同的形状。

例1:
In [30]: x = np.random.randn(4,4)
In [31]: x
Out[31]:
array([[ 0.47223924, -0.74427759, -1.67279362, 0.01203576],
[-0.83590182, 1.70742332, -1.01150273, 0.50330454],
[ 0.76771725, -1.38832902, -0.62673363, 0.27442247],
[-1.01199694, -0.65573435, 0.89553293, -0.74830605]])
In [32]: np.where(x>0,2,-2)
Out[32]:
array([[ 2, -2, -2, 2],
[-2, 2, -2, 2],
[ 2, -2, -2, 2],
[-2, -2, 2, -2]])
例2:
In [33]: xarr = np.array([1.1,1.2,1.3,1.4,1.5])
...: yarr = np.array([2.1,2.2,2.3,2.4,2.5])
...: zarr = np.array([True,False,True,True,False])
In [34]: np.where(zarr,xarr,yarr)
Out[34]: array([1.1, 2.2, 1.3, 1.4, 2.5])
2.2. 第⼆种⽤法
where(conditions) ,相当于给出符合条件的数组元素的下标。

例⼦1:
In [37]: x = np.random.randn(4)
In [38]: x
Out[38]: array([-0.0860867 , 1.42173872, -1.44341208, 0.61600628])
In [39]: np.where(x>0)
Out[39]: (array([1, 3], dtype=int64),)
例⼦2:如果想要求a集合中的元素在b中也存在,这样的下标,需要⽤到np.in1d(a,b)或者np.isin(a,b):
In [40]: a = np.array([1,2,4,5,6])
In [41]: b = np.array([2,6])
In [42]: np.where(np.in1d(a, b))
Out[42]: (array([1, 4], dtype=int64),)
In [46]: np.where(np.isin(a,b))
Out[46]: (array([1, 4], dtype=int64),)
可以观察到,where(conditions)取下标,返回的是⼀个元组,如果需要取这个下标数组需要通过结果result[0]去取或者(result,)=np.where(conditions)
3. 参考
(1)
(2)
(完)。

相关文档
最新文档