numpy学习笔记-将条件逻辑表述为数组运算
2017-04-27 20:32
288 查看
numpy.where函数是三元表达式x if condition else y的矢量化版本。假设我们有一个布尔数组和两个值数组。
假设我们想要根据cond中的值选取xarr和yarr的值:当cond中的值为true时,选取xarr的值,否则从yarr中选取。列表推导式的写法应该如下所示:
但是这样有几个问题。
一、它对大数组的处理速度不是很快
二、它无法用于多维数组。
若使用np.where,则可以将该功能写的特别简洁:
np.where第二个和第三个参数不必是数组,也可以是标量。
如下为随机数据组成的矩阵,将所有正值替换为2,所有负值替换为-2
只将正值设置为2
还可以用where实现更复杂的逻辑
比如
等价于
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]) cond = np.array([True,False,True,True,False])
假设我们想要根据cond中的值选取xarr和yarr的值:当cond中的值为true时,选取xarr的值,否则从yarr中选取。列表推导式的写法应该如下所示:
result = [(x if c else y) for x,y,c in zip(xarr,yarr,cond)] print result
输出结果 [1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]
但是这样有几个问题。
一、它对大数组的处理速度不是很快
二、它无法用于多维数组。
若使用np.where,则可以将该功能写的特别简洁:
result = np.where(cond,xarr,yarr) print result
输出结果 [ 1.1 2.2 1.3 1.4 2.5]
np.where第二个和第三个参数不必是数组,也可以是标量。
如下为随机数据组成的矩阵,将所有正值替换为2,所有负值替换为-2
arr = np.random.randn(4,4) print arr print np.where(arr>0,2,-2)
输出结果 [[ 1.80262171 0.7143772 2.28177789 0.43296688] [-0.71345291 0.70720256 0.09209334 -1.12625402] [ 1.45065299 0.55110371 -0.659351 -0.41175648] [ 0.4328763 0.67499992 -0.53531592 -0.38604227]] [[ 2 2 2 2] [-2 2 2 -2] [ 2 2 -2 -2] [ 2 2 -2 -2]]
只将正值设置为2
print np.where(arr>0,2,arr)
输出结果 [[-1.05460459 2. 2. 2. ] [ 2. 2. 2. 2. ] [-0.52191645 -0.98692719 2. 2. ] [-2.11448246 2. -0.25533101 -1.07167209]]
还可以用where实现更复杂的逻辑
比如
np.where(cond1&cond2,0, np.where(cond1,1, np.where(cond2,2,3)))
等价于
result = [] for i in range(n): if cond1[i] and cond2[i]: result.append(0) elif cond1[i]: result.append(1) elif cond2[i]: result.append(2) 4000 else: result.append(3)
相关文章推荐
- Numpy 将条件逻辑表述为数组运算
- Numpy学习笔记3-数组的运算
- 学习笔记---关系运算符、条件表达式、逻辑运算
- 【python学习笔记】18:numpy数组函数与矩阵运算
- 【python学习笔记】16:numpy数组四则运算
- java个人学习笔记02(注释+数据类型+算术逻辑运算)
- java 学习笔记2-变量、运算、数组
- 学习笔记------数据结构(C语言版)数组之行逻辑链接的顺序表
- 80X86学习笔记--逻辑运算与移位指令
- python 学习笔记(1)--numpy数组转置
- python numpy操作数组学习笔记(二)数组的分割和组合
- numpy学习笔记-用于布尔型数组的方法
- 蓝鸥Unity开发基础——关系运算和逻辑运算学习笔记
- [学习笔记02]条件、循环、数组
- 蓝鸥Unity开发基础——关系运算和逻辑运算学习笔记
- 【python学习笔记】15:numpy创建各种数组
- MATLAB学习笔记(六):数值数组及向量化运算(数组创建)
- Sass学习笔记 -- 初步了解函数、运算、条件判断及循环
- 《利用python进行数据分析》NumPy基础:数组和矢量计算 学习笔记
- 学习笔记——利用位运算求数组中只出现一次或奇数次的数字