NumPy数学函数

NumPy 中包含了大量的数学函数,它们用于执行各种数学运算,其中包括三角函数、舍入函数等等

三角函数

NumPy 中提供了用于弧度计算的的 sin()(正弦)、cos()(余弦)和 tan()(正切)三角函数。

1
2
3
4
5
6
7
import numpy as np 
arr = np.array([0, 30, 60, 90, 120, 150, 180])
#计算arr数组中给定角度的三角函数值
#通过乘以np.pi/180将其转换为弧度
print(np.sin(arr * np.pi/180))
print(np.cos(arr * np.pi/180))
print(np.tan(arr * np.pi/180))
反三角函数

除了上述三角函数以外,NumPy 还提供了 arcsin,arcos 和 arctan 反三角函数。若要想验证反三角函数的结果,可以通过 numpy.degrees() 将弧度转换为角度来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np 
arr = np.array([0, 30, 60, 90])
#正弦值数组
sinval = np.sin(arr*np.pi/180)
print(sinval)
#计算角度反正弦,返回值以弧度为单位
cosec = np.arcsin(sinval)
print(cosec)
#通过degrees函数转化为角度进行验证
print(np.degrees(cosec))
#余弦值数组
cosval = np.cos(arr*np.pi/180)
print(cosval)
#计算反余弦值,以弧度为单位
sec = np.arccos(cosval)
print(sec)
#通过degrees函数转化为角度进行验证
print(np.degrees(sec))
#下面是tan()正切函数
tanval = np.tan(arr*np.pi/180)
print(tanval)
cot = np.arctan(tanval)
print(cot)
print(np.degrees(cot))
舍入函数

NumPy 提供了三个舍入函数

  1. numpy.around()
    该函数返回一个十进制值数,并将数值四舍五入到指定的小数位上

numpy.around(a,decimals)

a:代表要输入的数组
decimals:要舍入到的小数位数。它的默认值为0,如果为负数,则小数点将移到整数左侧

1
2
3
4
5
import numpy as np 
arr = np.array([12.202, 90.23120, 123.020, 23.202])
print(arr)
print("数组值四舍五入到小数点后两位",np.around(arr, 2))
print("数组值四舍五入到小数点后-1位",np.around(arr, -1))
  1. numpy.floor()
    该函数表示对数组中的每个元素向下取整数,即返回不大于数组中每个元素值的最大整数
1
2
3
4
import numpy as np
a = np.array([-1.8, 1.1, -0.4, 0.9, 18])
#对数组a向下取整
print (np.floor(a))
  1. numpy.ceil()
    该函数与 floor 函数相反,表示向上取整
    1
    2
    3
    4
    import numpy as np
    a = np.array([-1.8, 1.1, -0.4, 0.9, 18])
    #对数组a向上取整
    print (np.ceil(a))

NumPy算术运算

NumPy 数组的“加减乘除”算术运算,分别对应 add()、subtract()、multiple() 以及 divide() 函数。

注意:做算术运算时,输入数组必须具有相同的形状,或者符合数组的广播规则,才可以执行运算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
a = np.arange(9, dtype = np.float_).reshape(3,3)
#数组a
print(a)
#数组b
b = np.array([10,10,10])
print(b)
#数组加法运算
print(np.add(a,b))
#数组减法运算
print(np.subtract(a,b))
#数组乘法运算
print(np.multiply(a,b))
#数组除法运算
print(np.divide(a,b))

numpy.reciprocal()

该函数对数组中的每个元素取倒数,并以数组的形式将它们返回。

当数组元素的数据类型为整型(int)时,对于绝对值小于 1 的元素,返回值为 0,而当数组中包含 0 元素时,返回值将出现 overflow(inf) 溢出提示

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
#注意此处有0
a = np.array([0.25, 1.33, 1, 0, 100])
#数组a默认为浮点类型数据
print(a)
#对数组a使用求倒数操作
print (np.reciprocal(a))
#b数组的数据类型为整形int
b = np.array([100], dtype = int)
print(b)
#对数组b使用求倒数操作
print( np.reciprocal(b) )

numpy.power(a,b)

该函数将 a 数组中的元素作为底数,把 b 数组中与 a 相对应的元素作幂 ,最后以数组形式返回两者的计算结果

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
a = np.array([10,100,1000])
#a数组
print ('我们的数组是;')
#调用 power 函数
print (np.power(a,2))
# b数组
b = np.array([1,2,3])
print (b)
# 调用 power 函数
print (np.power(a,b))

numpy.mod()

返回两个数组相对应位置上元素相除后的余数,它与 numpy.remainder() 的作用相同 。

1
2
3
4
5
6
7
import numpy as np
a = np.array([11,22,33])
b = np.array([3,5,7])
#a与b相应位置的元素做除法
print( np.mod(a,b))
#remainder方法一样
print(np.remainder(a,b))
复数数组处理函数

NumPy 提供了诸多处理复数类型数组的函数,主要有以下几个:

numpy.real()
返回复数数组的实部;

numpy.imag()
返回复数数组的虚部;

numpy.conj()
通过更改虚部的符号,从而返回共轭复数;

numpy.angle()
返回复数参数的角度,该函数的提供了一个 deg 参数,如果 deg=True,则返回的值会以角度制来表示,否则以以弧度制来表示。

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
a = np.array([-5.6j, 0.2j, 11. , 1+1j])
print(a)
#real()
print np.real(a)
#imag()
print np.imag(a)
#conj()
print np.conj(a)
#angle()
print np.angle(a)
#angle() 带参数deg
print np.angle(a, deg = True)

NumPy统计函数

NumPy 提供了许多统计功能的函数,比如查找数组元素的最值、百分位数、方差以及标准差等。

numpy.amin() 和 numpy.amax()

这两个函数用于计算数组沿指定轴的最小值与最大值:
amin() 沿指定的轴,查找数组中元素的最小值,并以数组形式返回;
amax() 沿指定的轴,查找数组中元素的最大值,并以数组形式返回。

对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向。

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print ('数组a是:')
print(a)
#amin()函数
print (np.amin(a))
#调用 amin() 函数,axis=1
print(np.amin(a,1))
#调用amax()函数
print(np.amax(a))
#再次调用amax()函数
print(np.amax(a,axis=0))

numpy.ptp()

numpy.ptp() 用于计算数组元素中最值之差值,也就是(最大值 - 最小值)。

1
2
3
4
5
import numpy as np 
a = np.array([[2,10,20],[80,43,31],[22,43,10]])
print("原数组",a)
print("沿着axis 1:",np.ptp(a,1))
print("沿着axis 0:",np.ptp(a,0))

numpy.percentile()

百分位数,是统计学中使用的一种度量单位。该函数表示沿指定轴,计算数组中任意百分比分位数

语法格式:
numpy.percentile(a, q, axis)

a:输入数组
q:要计算的百分位数,在 0~100 之间
axis:沿着指定的轴计算百分位数

1
2
3
4
5
import numpy as np 
a = np.array([[2,10,20],[80,43,31],[22,43,10]])
print("数组a:",a)
print("沿着axis=0计算百分位数",np.percentile(a,10,0))
print("沿着axis=1计算百分位数",np.percentile(a,10,1))

numpy.median()

numpy.median() 用于计算 a 数组元素的中位数(中值):

1
2
3
4
5
6
7
8
9
10
import numpy as np
a = np.array([[30,65,70],[80,95,10],[50,90,60]])
#数组a:
print(a)
#median()
print np.median(a)
#axis 0
print np.median(a, axis = 0)
#axis 1:
print(np.median(a, axis = 1))

numpy.mean()

该函数表示沿指定的轴,计算数组中元素的算术平均值(即元素之总和除以元素数量)

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print ('我们的数组是:')
print (a)

print ('调用 mean() 函数:')
print (np.mean(a))

print ('沿轴 0 调用 mean() 函数:')
print (np.mean(a, axis = 0))

print ('沿轴 1 调用 mean() 函数:')
print (np.mean(a, axis = 1))

numpy.average()

加权平均值是将数组中各数值乘以相应的权数,然后再对权重值求总和,最后以权重的总和除以总的单位数(即因子个数)。numpy.average() 根据在数组中给出的权重,计算数组元素的加权平均值。该函数可以接受一个轴参数 axis,如果未指定,则数组被展开为一维数组。

示例:
现有数组 [1,2,3,4] 和相应的权重数组 [4,3,2,1],它的加权平均值计算如下:加权平均值=(1 * 4 + 2 * 3 + 3 * 2 + 4 * 1)/(4 + 3 + 2 + 1)

使用 average() 计算加权平均值

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
a = np.array([1,2,3,4])
print('a数组是:')
print(a)
#average()函数:
print (np.average(a))
# 若不指定权重相当于对数组求均值
we = np.array([4,3,2,1])
#调用 average() 函数:')
print(np.average(a,weights = we))
#returned 为Ture,则返回权重的和
prin(np.average([1,2,3,4],weights = [4,3,2,1], returned = True))

在多维数组中,您也可以指定 axis 轴参数。

1
2
3
4
5
6
7
8
9
import numpy as np
a = np.arange(6).reshape(3,2)
#多维数组a
print (a)
#修改后数组
wt = np.array([3,5])
print (np.average(a, axis = 1, weights = wt))
#修改后数组
print (np.average(a, axis = 1, weights = wt, returned = True))

方差np.var()

方差,在统计学中也称样本方差,如何求得方差呢?首先我们要知道全体样本的的平均值,然后再求得每个样本值与均值之差的平方和,最后对差的平方和求均值。

1
2
import numpy as np
print (np.var([1,2,3,4]))

标准差np.std()

标准差是方差的算术平方根,用来描述一组数据平均值的分散程度。若一组数据的标准差较大,说明大部分的数值和其平均值之间差异较大;若标准差较小,则代表这组数值比较接近平均值。它的公式如下:

std = sqrt(mean((x - x.mean())**2

NumPy 中使用 np.std() 计算标准差。示例如下:

1
2
import numpy as np
print (np.std([1,2,3,4]))