前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >numpy中常用的数学运算和统计函数汇总

numpy中常用的数学运算和统计函数汇总

作者头像
生信修炼手册
发布2020-06-17 15:05:33
1.3K0
发布2020-06-17 15:05:33
举报
文章被收录于专栏:生信修炼手册

numpy用于操作数组,数组中的元素最常见的就是字符串和数值两种类型,本文针对数值型的数组,总结归纳了常用的数学运算和统计的函数。

在numpy中,有一个通函数-ufunc的概念,通函数是一类对数组中的元素逐个操作的函数,支持数组广播,类型转换以及一些其他的标准功能。numpy中定义了许多的通函数,用来对数组进行处理,比如最基本的数组加法运算

代码语言:javascript
复制
>>> import numpy as np
>>> a = np.arange(4)
>>> a
array([0, 1, 2, 3])
>>> b = np.arange(1,5)
>>> b
array([1, 2, 3, 4])
>>> a + b
array([1, 3, 5, 7])

上述代码在内部是通过调用通函数add来实现的,我们也可以单独调用通函数,用法如下

代码语言:javascript
复制
>>> np.add(a, b)
array([1, 3, 5, 7])

针对数值型数组,常用的数学运算的通函数有以下几种

1. 两个数组间的算术运算

两个数组间的加减乘除等算术运算,用法如下

代码语言:javascript
复制
>>> a
array([0, 1, 2, 3])
>>> b
array([1, 2, 3, 4])
# 加法
>>> np.add(a,b)
array([1, 3, 5, 7])
# 减法
>>> np.subtract(a,b)
array([-1, -1, -1, -1])
# 乘法
>>> np.multiply(a,b)
array([ 0,  2,  6, 12])
# 除法
>>> np.divide(a,b)
array([0.        , 0.5       , 0.66666667, 0.75      ])
# 乘方
>>> np.power(a,b)
array([ 0,  1,  8, 81], dtype=int32)
# 取余数
>>> np.remainder(a,b)
array([0, 1, 2, 3], dtype=int32)
# 取余数
>>> np.mod(a,b)
array([0, 1, 2, 3], dtype=int32)
# 取余数
>>> np.fmod(a,b)
array([0, 1, 2, 3], dtype=int32)
# 同时取商和余数
>>> np.divmod(a,b)
(array([0, 0, 0, 0], dtype=int32), array([0, 1, 2, 3], dtype=int32))

2. 单个数组的数学运算

包括绝对值,四舍五入以及指数和对数运算,用法如下

代码语言:javascript
复制
# 绝对值
>>> np.absolute(a)
array([0, 1, 2, 3])
# 绝对值
>>> np.fabs(a)
array([0., 1., 2., 3.])
>>> a = np.array([0.4, 1.2, 2.6, 3.5])
# 四舍五入为最近的整数
>>> np.rint(a)
array([0., 1., 3., 4.])
>>> np.around(a)
array([0., 1., 3., 4.])
>>> np.round(a)
array([0., 1., 3., 4.])
# 只保留整数位
>>> np.fix(a)
array([0., 1., 2., 3.])
# 向下取整
>>> np.floor(a)
array([0., 1., 2., 3.])
# 向上取整
>>> np.ceil(a)
array([1., 2., 3., 4.])
# 只保留整数位
>>> np.trunc(a)
array([0., 1., 2., 3.])
# 自然对数的指数
>>> np.exp(a)
array([ 1.        ,  2.71828183,  7.3890561 , 20.08553692])
# 2的指数
>>> np.exp2(a)
array([1., 2., 4., 8.])
# 自然对数为底的对数
>>> np.log(b)
array([      -inf, 0.        , 0.69314718, 1.09861229])
# 以2为底的对数
>>> np.log2(b)
array([     -inf, 0.       , 1.       , 1.5849625])
# 以10为底的对数
>>> np.log10(b)
array([      -inf, 0.        , 0.30103   , 0.47712125])
# 平方根
>>> np.sqrt(a)
array([0.        , 1.        , 1.41421356, 1.73205081])
# 平方
>>> np.square(a)
array([0, 1, 4, 9], dtype=int32)

对于数值型数组,经常需要统计极值,均值,方差,中位数等统计指标,常用的统计函数用法如下

代码语言:javascript
复制
>>> a = np.arange(100)
# 最小值
>>> np.amin(a)
0
# 最大值
>>> np.amax(a)
99
# 最小值,忽略NaN
>>> np.nanmin(a)
0
# 最大值,忽略NaN
>>> np.nanmax(a)
99
# 求和
>>> np.sum(a)
4950
# 求和,忽略NaN
>>> np.nansum(a)
4950
# 极差,最大值 - 最小值
>>> np.ptp(a)
99
# 百分位数
>>> np.percentile(a, q = [25, 50, 75])
array([24.75, 49.5 , 74.25])
# 百分位数,忽略NaN
>>> np.nanpercentile(a, q = [25, 50, 75])
array([24.75, 49.5 , 74.25])
# 百分位数
>>> np.quantile(a, q = [0.25, 0.5, 0.75])
array([24.75, 49.5 , 74.25])
# 百分位数,忽略NaN
>>> np.nanquantile(a, q = [0.25, 0.5, 0.75])
array([24.75, 49.5 , 74.25])
# 均值
>>> np.mean(a)
49.5
# 均值
>>> np.average(a)
49.5
# 均值, 忽略NaN
>>> np.nanmean(a)
49.5
# 中位数
>>> np.median(a)
49.5
# 中位数,忽略NaN
>>> np.nanmedian(a)
49.5
# 标准差
>>> np.std(a)
28.86607004772212
# 标准差,忽略NaN
>>> np.nanstd(a)
28.86607004772212
# 方差
>>> np.var(a)
833.25
# 方差,忽略NaN
>>> np.var(a)
833.25
# 计算每个区间的频数,区间为左闭右开
>>> np.histogram(a, bins = [0, 20, 40, 60, 80, 100])
(array([20, 20, 20, 20, 20], dtype=int32), array([  0,  20,  40,  60,  80, 100]))

numpy内置的函数非常丰富,基本满足了日常开发的需求,熟练使用每个函数,可以提高我们的编码效率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档