开发者学堂课程【Python 科学计算库 NumPy 快速入门:逻辑运算】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/605/detail/8821
逻辑运算
内容简介:
一、布尔索引
二、通用判断函数
三、np.where(三元运算符)
一、布尔索引
#重新生成8只股票10个交易日的涨跌幅数据
>>> stock_ change = np. random. normal(0, 1, (8, 10))
>>> stock_ change = stock_ change[0:5, 0:5]
#逻辑判断,如果涨跌幅大于0. 5就标记为 True 否则为 False
>>> stock_ change > 0.5
array([[True, False, False, True, False],
[ True,True, False, False, Falsel,
[ True, False, True, False,True],
[False,True, False, False, False],
[False, False, False,True,True]])
# B00L 赋值, 将满足条件的设置为指定的值-布尔索引
>> stock_ change [stock_ change > 0.5] = 1
array([[1. , -0.72404879, -1.33045773, 1. , 0.3869043 ]
[ 1. ,1. ,0.20815446, -1. 67860823, 0.06612823] ,
[1. , 0.42753488, 1. , -0.24375089, 1. ],
[-0.971945, 1. , -0.95444661, -0.2602084 , -0.48736497] ,
[-0.32183056, -0. 92544956, -0. 42126604, 1. , 1. ]])
In [97J:#逻辑判断,如果涨跌幅大>0.5就标记为 True 否则为 False
布尔索引:
1、In [98]: stock_ change[stock_ change > 0.5]
Out[98]: array([1.46338968, 0.83167611, 1.38319911, 1.19314047, 1.34072589,
1.19030379, I .4371421 , 0.91122464, 0. 79542753, 1.7344868,
1.37510973, 0.57335311, 0.97390091, 0.84445247, 0. 86546709,
0.52007085, 0.57108639, 1.03303301, 1.04716985, 0. 87722923.
0.56273065, 0.88443604])
二、通用判断函数
(1)np.all(布尔值)
只要有一个 False 就返回 False,只有全是 True 才返回 True
#判断 stock_ .change[0:2, 0:5]是否全是上涨的
>>> np.all(stock_ change[0:2, 0:5] > 0)
False
In[102]:# 判断 stock_ change[0:2, 0:5]是否全是上涨的
stock_ change[0:2, 0:5] > 0
Out[102]: array([[True, False,True,True,True],
[ True,True,True,True,True] ])
In [103] :np.all( stock_ change(0:2. 0:5] > 0)
Out[103]: False
(2)np. any()只要有一个 True 就返回 True,只有全是 False 才返回 False|
#判断前5只股票这段期间是否有上涨的
>>> np. any(stock change[0:5, :] > 0 )
True
In [107] :#判断前5只股票这段期间是否有上涨的
np. any(stock_ change[:5, -] > 0)
Out[ 107] :True
三、np.where(三元运算符)
np. where(布尔值,True 的位置的值,False 的位 置的值)
通过使用 np.where 能够进行更加复杂的运算
●np.where()
#判断前四个股票前四天的涨跌幅大于0的置为1, 否则为0
temp = stock_ change[:4, :4]
np. where(temp> 0, 1, 0)
例子:
In [108]: # 判断前四个股票前四天的涨跌幅 大于0的置为1,否则为0
temp = stock_change[:4, :4]
In [111]: temp
Out[111]: array([[1.1 , -0.45576704, 0.29667843, 0.16606916] ,
[0.36775845, 0. 24078108, 0.122042 , 1.1 ],
[-1.48252741, -0.69347186, 1.1 , -0.30606473],
[ 0.39438905, -1.31770556, 1.1 ,-1.52812773]])
In [110]: np.where(temp > 0, 1, 0)
Out[110]: array([[1, 0, 1, 1],
[1, 1, 1, 1],
[0,0,1,0],
[1,0,1,0]])
In[112]:temp>0
Out[112]: array([[ True, False, True,True],
[True, True, True,True] ,
[False, False, True, False],
[ True, False, True, False]])
In [ ]: np·where([[True, False, True, True],
[True, True, True, True],
[False, False, True, False],
[True, False, True, False]], )
In (113]: np.where([[ True, False, True, True],
[True,True, True, True] ,
[False, False, True, False],
[True, False, True, False]], 1, 0)
Out[113]: array([[1, 0, 1, 1],
[1, 1, 1, 1],
[0,0,1,0],
[1, 0, 1, 0]])
复合逻辑需要结合 np.logical_and 和 np.logical_or 使用
#判断前四个股票前四天的涨跌幅大于0.5并且小于1的,换为1,否则为0
例子:In[117]:#判断前四个股票前四天的涨跌幅大于0.5并且小于1的,换为1,否则为0
#(temp > 0.5) and (temp < 1 )
np.logical and(temp > 0.5, temp < 1)
Out[117]: array([[False, False, False, False],
[False, False, False, Fa1se],
[Fa1se, False, False, False],
[False, False, False, False]])
In [119]: np.where([[False, False, False, Fa1se],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False]], 1, 0)
Out[119]: array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
In [120]: np.where(np.logical and(temp > 0.5, temp < 2), 1, 0)
Out[120]:array([[0,0,0,0],
[0,0,0,0],
[0,0,0,0]
[0, 0, 0, 0]])
#判断前四个股票前四天的涨跌幅大于0.5或者小于-0.5的,换为1,否则为0
np.where(np. logical_ and(temp > 0.5, temp < 1), 1, 0)
np.where(np. Logical_or(temp > 0.5, temp < -0.5), 1, 0)