返回介绍

第25单元 揭秘通用函数

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

矢量化通用函数是对应广播功能的函数。只需要一次函数调用,就可以将通用函数应用于所有数组项。numpy提供了很多通用函数,举例如下。

算术运算:add()、multiply()、negative()、exp()、log()、sqrt()

三角函数:sin()、cos()、hypot()

按位运算:bitwise_and()、left_shift()

关系和逻辑运算:less()、logical_not()、equal()

maximum()和minimum()

使用浮点数的函数:isinf()、isfinite()、floor()、isnan()

假设一个名为stocks的一维数组中记录了sap中8个代码对应的股票在2016年1月10日的周末前后的价格。

   Stocks

➾ array([ 140.49,    0.97,   40.68,   41.53,   55.7 ,   57.21,   98.2 ,99.19,  109.96,  111.47,   35.71,   36.27,   87.85,   89.11,30.22,   30.91])

现在我们想知道哪些股票的价格在周末下跌了。首先,按照股票代码对股价进行分组,并将较新的报价放在较早的报价之后。其实现方法是把原始数组重排成2×8的矩阵:

   stocks = stocks.reshape(8, 2).T

➾ array([[ 140.49,    40.68,   55.7 ,   98.2 ,   109.96,   35.71,   87.85,30.22],[   0.97,    41.53,   57.21,   99.19,   111.47,   36.27,   89.11,30.91]])

接下来使用greater()函数逐列比较数组的两行数据,根据所得到的布尔索引就能找出感兴趣的股票代码:

   fall = np.greater(stocks[0], stocks[1])

➾ array([True, False, False, False, False, False, False, False], dtype=bool)

   sap[fall]

➾ array(['MMM'],dtype='<U4')

顺便介绍一下,MMM是一家使用“庞氏骗局”的俄罗斯公司,它从未在任何证券交易所上市。难怪它的股价正在下跌。

除了“传统”数字之外,numpy全面支持IEEE 754浮点标准,并提供正无穷大(inf)和非数字(nan)两种符号。如果没有使用numpy,则这两个符号分别是float("inf")和float("nan")。按照数据科学领域约定的做法,本书使用nan作为缺失数据的占位符(缺失数据的问题在第1单元中介绍过)。

通用函数isnan()是一个极好用的nan的定位工具。实际上,对于下面的例子,用零值替换缺失的数据恐怕是一个很糟糕的做法(我们之前在第23单元就是这么做的),所以下面我们用isnan()重做一次:

   # 假定MMM股票的新报价丢失了
   stocks[1, 0] = np.nan
   np.isnan(stocks)

➾ array([[False, False, False, False, False, False, False, False],[ True, False, False, False, False, False, False, False]], dtype=bool)

   # 修复;没有比这更糟的做法了
   stocks[np.isnan(stocks)] = 0

➾ array([[ 140.49,    40.68,   55.7 ,   98.2 ,   109.96,   35.71,   87.85,30.22],[   0. ,     41.53,   57.21,   99.19,   111.47,   36.27,   89.11,30.91]])

通用函数扩展了Python的算术函数和关系运算符的功能,增加了更多的可能性,这种方式给出的条件函数可以说是Python逻辑运算符的加强版。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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