返回介绍

第26单元 理解条件函数

发布于 2024-01-28 22:01:16 字数 1114 浏览 0 评论 0 收藏 0

函数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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文