初识数据分析之NumPy笔记三 数组的通用函数

来源:《利用Python进行数据分析·第2版》

通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。你可以将其看做简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。

许多ufunc都是简单的元素级变体,如sqrt和exp:

In [1]: import numpy as np

In [2]: arr = np.arange(10)

In [3]: arr
Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [4]: np.sqrt(arr)  # sqrt() 方法返回数字x的平方根。
Out[4]:
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])

In [5]: np.exp(arr)   # numpy.exp():返回e的幂次方,e是一个常数为2.71828
Out[5]:
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
       2.98095799e+03, 8.10308393e+03])

这些都是一元(unary)ufunc。另外一些(如add或maximum)接受2个数组(因此也叫二元(binary)ufunc),并返回一个结果数组:

In [6]: x = np.random.randn(8)

In [7]: y = np.random.randn(8)

In [8]: np.maximum(x, y) # X 与 Y 逐位比较取其大者, max函数求最值
Out[8]:
array([-1.23864363,  0.14517743,  0.44557689,  0.10949484,  1.7875112 ,
        0.71187083,  2.17088865, -0.76403318])

虽然并不常见,但有些ufunc的确可以返回多个数组。modf就是一个例子,它是Python内置函数divmod的矢量化版本,它会返回浮点数数组的小数和整数部分:

In [14]: float_, int_ = np.modf(arr)

In [15]: int_
Out[15]: array([ 0.,  0.,  8., -1., -6., -2., -4.])

In [16]: float_
Out[16]:
array([ 0.85884195,  0.36133467,  0.47948276, -0.1733817 , -0.86433357,
       -0.43693461, -0.33072573])

Ufuncs可以接受一个out可选参数,这样就能在数组原地进行操作:

In [19]: arr
Out[19]:
array([ 0.85884195,  0.36133467,  8.47948276, -1.1733817 , -6.86433357,
       -2.43693461, -4.33072573])

In [20]: np.sqrt(arr)
D:\conda\Scripts\ipython:1: RuntimeWarning: invalid value encountered in sqrt
Out[20]:
array([0.92673726, 0.6011112 , 2.91195514,        nan,        nan,
              nan,        nan])

In [21]: arr
Out[21]:
array([ 0.85884195,  0.36133467,  8.47948276, -1.1733817 , -6.86433357,
       -2.43693461, -4.33072573])

In [22]: np.sqrt(arr, arr)
D:\conda\Scripts\ipython:1: RuntimeWarning: invalid value encountered in sqrt
Out[22]:
array([0.92673726, 0.6011112 , 2.91195514,        nan,        nan,
              nan,        nan])

In [23]: arr
Out[23]:
array([0.92673726, 0.6011112 , 2.91195514,        nan,        nan,
              nan,        nan])

表4-3和表4-4分别列出了一些一元和二元ufunc。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值