通用函数

通用函数,也可以称为ufunc,是一种在ndarray数据中进行逐元素操作的函数,某些简单函数接收一个或多个标量数值,并产生一个或多个标量结果,而通用函数就是对这些简单函数的向量化封装。

有很多ufunc是简单的逐元素转换,比如sqrt(计算每个元素的平方根)或exp(计算每个自然是的自然指数)函数:

import numpy as np
arr = np.arange(10)

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

np.sqrt(arr)
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])

np.exp(arr)
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])

这些所谓的一元通用函数。还有一些通用函数,比如addmaximum则会接收两个数组并返回一个数组作为结果,因此称为二元通用函数:

x = np.random.randn(8)
y = np.random.randn(8)

x
array([-1.1397517 ,  0.97265244, -0.46907263,  1.53825335, -0.4973196 ,
       -0.55674484, -0.20230743, -2.42897899])

y
array([ 0.97921308, -0.26687344,  0.67902616, -0.47888584, -0.56123782,
       -1.40019468, -0.65769972,  0.20303061])

np.maximum(x,y)
np.maximum(x,y)
array([ 0.97921308,  0.97265244,  0.67902616,  1.53825335, -0.4973196 ,
       -0.55674484, -0.20230743,  0.20303061])

这里,numpy.maximum逐个元素地将x和y中元素的最大值计算出来。

也有一些通用函数返回多个数组。比如modf,是Python内建函数divmod的向量化版本。它返回了一个浮点数值数组的小数部分和整数部分:

arr = np.random.randn(7)*5

arr
array([-12.29659455,   7.36903993,  -2.78572404,  -1.94801433,
         7.49312566,   1.6880044 ,  -0.93929079])

remainder,whole_part = np.modf(arr)

remainder
array([-0.29659455,  0.36903993, -0.78572404, -0.94801433,  0.49312566,
        0.6880044 , -0.93929079])

whole_part
array([-12.,   7.,  -2.,  -1.,   7.,   1.,  -0.])

通用函数接收一个可选参数out,允许对数组按位置操作:

arr
array([-12.29659455,   7.36903993,  -2.78572404,  -1.94801433,
         7.49312566,   1.6880044 ,  -0.93929079])

np.sqrt(arr)
array([       nan, 2.71459756,        nan,        nan, 2.73735742,
       1.29923223,        nan])

np.sqrt(arr,arr)
array([       nan, 2.71459756,        nan,        nan, 2.73735742,
       1.29923223,        nan])

arr
array([       nan, 2.71459756,        nan,        nan, 2.73735742,
       1.29923223,        nan])

猜你喜欢

转载自blog.csdn.net/qq_41205111/article/details/86717183
今日推荐