文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第26单元 理解条件函数
函数where(c, a, b)是numpy风格的if-else三元运算符3。它通过一个布尔数组(c)和两个其他数组(a和b)得出数组d,数组d满足:如果c[i]为真,则d[i]=a[i],否则d[i]=b[i]。三个数组必须具有相同的形状。
3if-else条件表达式是从Python 2.5开始引入的写法。X if C else Y:只有当条件C为真时,X才会被执行;只有当C为假时,Y才会被执行。具体的讨论见Python官网:https://www.python.org/dev/peps/pep-0308/。——译者注
如果数组中任意元素为真,则函数any()返回True。如果数组中所有元素为真,则函数all()返回True。
函数nonzero()返回所有非零元素的索引。
我们在第25单元用数组sap中记录了一些标准普尔股票的价格。现在要找出哪支股票的变化幅度较大(每股超过1.00美元),我们将幅度变化“小”的用零替换,然后找出非零元素,将它们的索引作为“智能索引”作用在股票符号的数组上:
changes = np.where(np.abs(stocks[1] - stocks[0]) > 1.00, stocks[1] - stocks[0], 0) ➾ array([-139.52, 0. , 1.51, 0. , 1.51, 0. , 1.26, 0. ]) sap[np.nonzero(changes)] ➾ array(['MMM', 'ABBV', 'ACE', 'ADBE'], ➾ dtype='<U4')
单独使用布尔索引也可以得到相同的结果:
sap[np.abs(stocks[1] - stocks[0]) > 1.00] ➾ array(['MMM', 'ABBV', 'ACE', 'ADBE'], ➾ dtype='<U4')
但是这样做就少了很多乐趣!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论