通用函数

通用函数

一元函数:

函数 描述
np.abs 绝对值
np.sqrt 开根
np.square 平方
np.exp 计算指数(e^x)
np.log,np.log10,np.log2,np.log1p 求以e为底,以10为低,以2为低,以(1+x)为底的对数
np.sign 将数组中的值标签化,大于0的变成1,等于0的变成0,小于0的变成-1
np.ceil 朝着无穷大的方向取整,比如5.1会变成6,-6.3会变成-6
np.floor 朝着负无穷大方向取证,比如5.1会变成5,-6.3会变成-7
np.rint,np.round 返回四舍五入后的值
np.modf 将整数和小数分隔开来形成两个数组
np.isnan 判断是否是nan
np.isinf 判断是否是inf
np.cos,np.cosh,np.sin,np.sinh,np.tan,np.tanh 三角函数
np.arccos,np.arcsin,np.arctan 反三角函数
a = np.random.uniform(-10,10,size=(3,5))
a
# 输出
array([[-6.71149229, -2.17809525,  8.57545287, -5.31680944, -5.84956773],
       [-8.57309185, -5.76927816, -9.8563885 ,  2.79138433, -1.8064904 ],
       [-6.96541888, -2.77797572, -6.22511018, -7.55583726,  0.24365377]])
# 1. np.abs
np.abs(a)
# 输出
array([[6.71149229, 2.17809525, 8.57545287, 5.31680944, 5.84956773],
       [8.57309185, 5.76927816, 9.8563885 , 2.79138433, 1.8064904 ],
       [6.96541888, 2.77797572, 6.22511018, 7.55583726, 0.24365377]])
# 2. np.sqrt
np.sqrt(a)
# 输出
array([[       nan,        nan, 2.92838742,        nan,        nan],
       [       nan,        nan,        nan, 1.67074364,        nan],
       [       nan,        nan,        nan,        nan, 0.49361298]])
# 3. np.square
np.square(a)
# 输出
array([[4.50441288e+01, 4.74409890e+00, 7.35383919e+01, 2.82684626e+01,
        3.42174426e+01],
       [7.34979038e+01, 3.32845704e+01, 9.71483943e+01, 7.79182645e+00,
        3.26340755e+00],
       [4.85170601e+01, 7.71714912e+00, 3.87519968e+01, 5.70906766e+01,
        5.93671608e-02]])
# 4. np.exp
np.exp(a)
# 输出
array([[1.21684688e-03, 1.13257052e-01, 5.29995109e+03, 4.90838930e-03,
        2.88114432e-03],
       [1.89126993e-04, 3.12201031e-03, 5.24112914e-05, 1.63035736e+01,
        1.64229507e-01],
       [9.43967446e-04, 6.21642176e-02, 1.97910575e-03, 5.23048034e-04,
        1.27590250e+00]])
# 5. np.log
np.log(a)
# 输出
array([[        nan,         nan,  2.1489038 ,         nan,         nan],
       [        nan,         nan,         nan,  1.02653765,         nan],
       [        nan,         nan,         nan,         nan, -1.41200703]])
# 6. np.sign
np.sign(a)
# 输出
array([[-1., -1.,  1., -1., -1.],
       [-1., -1., -1.,  1., -1.],
       [-1., -1., -1., -1.,  1.]])
# 7. np.ceil
np.ceil(a)
# 输出
array([[-6., -2.,  9., -5., -5.],
       [-8., -5., -9.,  3., -1.],
       [-6., -2., -6., -7.,  1.]])
# 8. np.floor
np.floor(a)
# 输出
array([[ -7.,  -3.,   8.,  -6.,  -6.],
       [ -9.,  -6., -10.,   2.,  -2.],
       [ -7.,  -3.,  -7.,  -8.,   0.]])
# 8. np.rint或者np.round
np.rint(a)
# 输出
array([[ -7.,  -2.,   9.,  -5.,  -6.],
       [ -9.,  -6., -10.,   3.,  -2.],
       [ -7.,  -3.,  -6.,  -8.,   0.]])
# 9. np.modf
np.modf(a)[1]
# 输出
array([[-6., -2.,  8., -5., -5.],
       [-8., -5., -9.,  2., -1.],
       [-6., -2., -6., -7.,  0.]])
# 10. np.sin
np.sin(a)
# 输出
array([[-0.41533131, -0.82119239,  0.7508348 ,  0.82283158,  0.42015632],
       [-0.75239214,  0.49158346,  0.41833419,  0.3430935 , -0.9723525 ],
       [-0.63052822, -0.35565699,  0.05804249, -0.95588322,  0.24125008]])

二元函数:

函数 描述
np.add 加法运算(即1+1=2),相当于+
np.subtract 减法运算(即3-2=1),相当于-
np.negative 负数运算(即-2),相当于加个负号
np.multiply 乘法运算(即2*3=6),相当于*
np.divide 除法运算(即3/2=1.5),相当于/
np.floor_divide 取整运算,相当于//
np.mod 取余运算,相当于%
greater,greater_equal,less,less_equal,equal,not_equal >,>=,<,<=,=,!=的函数表达式
logical_and &的函数表达式
logical_or |的函数表达式
a+1
# 输出
array([[-5.71149229, -1.17809525,  9.57545287, -4.31680944, -4.84956773],
       [-7.57309185, -4.76927816, -8.8563885 ,  3.79138433, -0.8064904 ],
       [-5.96541888, -1.77797572, -5.22511018, -6.55583726,  1.24365377]])
np.add(a,np.random.randint(0,5,size=(3,1)))
# 输出
array([[-4.71149229, -0.17809525, 10.57545287, -3.31680944, -3.84956773],
       [-6.57309185, -3.76927816, -7.8563885 ,  4.79138433,  0.1935096 ],
       [-5.96541888, -1.77797572, -5.22511018, -6.55583726,  1.24365377]])
# a[a > 0]
a[np.greater(a,0)]
# 输出
array([8.57545287, 2.79138433, 0.24365377])
# a[(a > 0) & (a < 5)]
a[np.logical_and(a>0,a<5)]
# 输出
array([2.79138433, 0.24365377])
# a[(a > 5) | (a < 0)]
a[np.logical_or(a>5,a<0)]
# 输出
array([-6.71149229, -2.17809525,  8.57545287, -5.31680944, -5.84956773,
       -8.57309185, -5.76927816, -9.8563885 , -1.8064904 , -6.96541888,
       -2.77797572, -6.22511018, -7.55583726])

聚合函数:

函数名称 NAN安全版本 描述
np.sum np.nansum 计算元素的和
np.prod np.nanprod 计算元素的积
np.mean np.nanmean 计算元素的平均值
np.std np.nanstd 计算元素的标准差
np.var np.nanvar 计算元素的方差
np.min np.nanmin 计算元素的最小值
np.max np.nanmax 计算元素的最大值
np.argmin np.nanargmin 找出最小值的索引
np.argmax np.nanargmax 找出最大值的索引
np.median np.nanmedian 计算元素的中位数

使用np.sum或者是a.sum即可实现。并且在使用的时候,可以指定具体哪个轴。同样Python中也内置了sum函数,但是Python内置的sum函数执行效率没有np.sum那么高,可以通过以下代码测试了解到:

a = np.random.rand(1000000)
%timeit sum(a) #使用Python内置的sum函数求总和,看下所花费的时间
%timeit np.sum(a) #使用Numpy的sum函数求和,看下所花费的时间

布尔数组的函数:

函数名称 描述
np.any 验证任何一个元素是否为真
np.all 验证所有元素是否为真

比如想看下数组中是不是所有元素都为0,那么可以通过以下代码来实现:

np.all(a==0) 
# 或者是
(a==0).all()

比如我们想要看数组中是否有等于0的数,那么可以通过以下代码来实现:

np.any(a==0)
# 或者是
(a==0).any()

排序:

  1. np.sort:指定轴进行排序。默认是使用数组的最后一个轴进行排序。

     a = np.random.randint(0,10,size=(3,5))
     b = np.sort(a) #按照行进行排序,因为最后一个轴是1,那么就是将最里面的元素进行排序。
     c = np.sort(a,axis=0) #按照列进行排序,因为指定了axis=0
    

    还有ndarray.sort(),这个方法会直接影响到原来的数组,而不是返回一个新的排序后的数组。

  2. np.argsort:返回排序后的下标值。示例代码如下:

     np.argsort(a) #默认也是使用最后的一个轴来进行排序。
    
  3. 降序排序:np.sort默认会采用升序排序。如果我们想采用降序排序。那么可以采用以下方案来实现:

     # 1. 使用负号
     -np.sort(-a)
    
     # 2. 使用sort和argsort以及take
     indexes = np.argsort(-a) #排序后的结果就是降序的
     np.take(a,indexes) #从a中根据下标提取相应的元素
    

其他函数补充:

  1. np.apply_along_axis:沿着某个轴执行指定的函数。示例代码如下:

     # 求数组a按行求均值,并且要去掉最大值和最小值。
     np.apply_along_axis(lambda x:x[(x != x.max()) & (x != x.min())].mean(),axis=1,arr=a)
    
  2. np.linspace:用来将指定区间内的值平均分成多少份。示例代码如下:

     # 将0-1分成12分,生成一个数组
     np.linspace(0,1,12)
    
  3. np.unique:返回数组中的唯一值。

     # 返回数组a中的唯一值,并且会返回每个唯一值出现的次数。
     np.unique(a,return_counts=True)
    
# 1. apply_along_axis:
c = np.random.randint(0,100,size=(3,20))
c
# 输出
array([[31,  1, 69,  3, 92, 95, 47, 61, 51, 15, 41, 63, 27, 88, 30, 49,
        90, 93, 21, 89],
       [82, 39, 25, 20, 15, 88, 83, 91, 83, 61, 10,  0, 33, 11, 36, 95,
        50, 54, 41, 27],
       [11, 71, 17, 66, 83, 30, 26, 10, 26, 58, 29, 28, 86, 57, 29, 49,
        57, 31, 74, 35]])
# def get_mean(x):
#     y = x[np.logical_and(x!=x.max(),x!=x.min())].mean()
#     return y
np.apply_along_axis(lambda x:x[np.logical_and(x!=x.max(),x!=x.min())].mean(),axis=0,arr=c)
# 输出
array([31., 39., 25., 20., 83., 88., 47., 61., 51., 58., 29., 28., 33.,
       57., 30., nan, 57., 54., 41., 35.])
np.linspace(0,1,10)
# 输出
array([0.        , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
       0.55555556, 0.66666667, 0.77777778, 0.88888889, 1.        ])
d = np.random.randint(0,10,size=(3,5))
d
# 输出
array([[8, 0, 1, 0, 7],
       [4, 9, 7, 3, 3],
       [4, 0, 9, 4, 0]])
np.unique(d,return_counts=True)
# 输出
(array([0, 1, 3, 4, 7, 8, 9]), array([4, 1, 2, 3, 2, 1, 2], dtype=int64))

更多:

https://docs.scipy.org/doc/numpy/reference/index.html

posted @   坤坤无敌  阅读(239)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示