Numpy常用统计分析函数

33 阅读5分钟

数学运算函数

Numpy包含大量的数学运算的函数,包括三角函数、算术运算函数、复数处理函数等等。如下表所示。

image.png

算术运算

Numpy算术函数包含简单的加、减、乘、除运算,如add()函数、subtract()函数、multiply()函数和divide()函数。这里要注意的是,数组必须具有相同的形状或符合数组广播规则。

import numpy as np
'''加减乘除'''
n1 = np.array([[1,2,3],[4,5,6],[7,8,9]])  #创建数组
n2 = np.array([10, 10, 10])
print(n1)
print(n2)
print('两个数组相加:')
print(np.add(n1, n2))
print('两个数组相减:')
print(np.subtract(n1, n2))  #n1-n2
print('两个数组相乘:')
print(np.multiply(n1, n2))
print('两个数组相除:')
print(np.divide(n1, n2))

"""倒数
reciprocal()函数用于返回数组中各元素的倒数。如4/3的倒数就是3/4"""
a = np.array([0.25,1.75,2,100])
print(a)
print(np.reciprocal(a))

'''求幂
power()函数是将第一个数组中的元素作为底数,计算它与第二个数组中相应元素的幂'''
n3 = np.array([10,100,1000])
print(np.power(n3,3))    #n3的3次方
n4 = np.array([1,2,3])
print(np.power(n3,n4))   #n3的n4次方

'''取余
mod()函数用于计算数组之间相应元素相除后的余数'''
n5 = np.array([10,20,30,-40])
n6 = np.array([4,5,-8,3])
print(np.mod(n5,n6)) #n5除以n6的余数

舍入函数

四舍五入around()函数

该函数返回指定小数位数的四舍五入值。

import numpy as np

'''around()函数'''
n1 = np.array([4.5, 1.5, 6.823, 100, 0.1189, 3.1415926, -2.345])  # 创建数组
print(np.around(n1))  # 四舍五入取整,跟round()类似
print(np.around(n1, decimals=2))  # 四舍五入保留小数点两位
print(np.around(n1, decimals=-1))  # 四舍五入取整到小数点左侧

image.png

向上取整ceil()函数

ceil()函数用于返回大于或者等于指定表达式的最小整数

import numpy as np

'''向上取整函数'''
n2 = np.array([-1.8,4.5, 1.66, -0.2, 0.888, 15])  # 创建数组
print(np.ceil(n2))  # 向上取整

image.png

向下取整floor()整数

floor()函数用于返回小于或者等于指定表达式的最大整数。

'''向下取整函数'''
import numpy as np
n3 = np.array([-1.8, 1.5, 1.66, -0.2, 0.888, 15])  #创建数组
print(np.floor(n3)) #向下取整

image.png

三角函数

Numpy提供了标准的三角函数,即sin()函数,cos()函数,tan()函数。

import numpy as np

n = np.array([0, 30, 45, 60, 90])
# 通过乘 pi/180 转化为弧度
print('不同角度的正弦值:')
print(np.sin(n * np.pi / 180))

print('数组中角度的余弦值:')
print(np.cos(n * np.pi / 180))

print('数组中角度的正切值:')
print(np.tan(n * np.pi / 180))

image.png

arcsin()函数、arccos()函数和arctan()函数用于返回给定角度的sin,cos和tan的反三角函数。这些函数的结果可以通过degrees()函数转换为角度。

import numpy as np
n = np.array([0, 30, 45, 60, 90])
print('不同角度的正弦值:')
sin = np.sin(n * np.pi / 180)
print(sin)
print('计算角度的反正弦,返回值以弧度为单位:')
inv = np.arcsin(sin)
print(inv)
print('弧度转化为角度:')
print(np.degrees(inv))

统计分析函数

image.png

求和函数

import numpy as np
n=np.array([[1,2,3],[4,5,6],[7,8,9]])
print('对数组元素求和:')
print(n.sum())
print('对数组元素按行求和:')
print(n.sum(axis=0))
print('对数组元素按列求和:')
print(n.sum(axis=1))

求平均值函数

import numpy as np
n=np.array([[1,2,3],[4,5,6],[7,8,9]])
print('对数组元素求平均值:')
print(n.mean())
print('对数组元素按行求平均值:')
print(n.mean(axis=0))
print('对数组元素按列求平均值:')
print(n.mean(axis=1,dtype=int))

image.png

求最大最小值函数

import numpy as np
n=np.array([[1,2,3],[4,5,6],[7,8,9]])
print('数组元素最大值:')
print(n.max())
print('数组中每一行的最大值:')
print(n.max(axis=0))
print('数组中每一列的最大值:')
print(n.max(axis=1))
print('数组元素最小值:')
print(n.min())
print('数组中每一行的最小值:')
print(n.min(axis=0))
print('数组中每一列的最小值:')
print(n.min(axis=1))

求加权平均函数

import numpy as np

price = np.array([34.5, 36, 37.8, 39, 39.8, 33.6])  # 创建“单价”数组
number = np.array([900, 580, 230, 150, 120, 1800])  # 创建“销售数量”数组
print('加权平均价:')
print(np.average(price, weights=number))

求中位数

查找中位数会先排序再找

import numpy as np
n=np.array([34.5,36,37.8,39,39.8,33.6])  #创建“单价”数组
# 数组排序后,查找中位数
sort_n = np.sort(n)
print('数组排序:')
print(sort_n)
print('数组中位数为:')
print(np.median(sort_n))
print(np.median(n))

image.png

方差,标准差

import numpy as np

n = np.array([34.5, 36, 37.8, 39, 39.8, 33.6])  # 创建“单价”数组
print('数组方差:')
print(np.var(n))
print('数组标准差:')
print(np.std(n))

数组的排序

sort()函数

使用sort()函数进行排序,直接改变原数组,参数axis指定按行排序还是按列排序。(0行1列)

import numpy as np
n=np.array([[4,7,3],[2,8,5],[9,1,6]])
print(n)
print('数组排序:')
print(np.sort(n))
print('按行排序:')
print(np.sort(n,axis=0))
print('按列排序:')
print(np.sort(n,axis=1))

image.png

argsort()函数

使用argsort()函数对数组进行排序,返回升序排序之后数组从小到大的索引值

import numpy as np
x=np.array([4,7,3,2,8,5,1,9,6])

y = np.argsort(x)
print('升序排序后的索引值:') #升序之后索引值排序
print(y)
print('排序后的顺序重构原数组:')
print(x[y])

image.png

lexsort()函数

lexsort()函数用于对多个序列进行排序,可以把它当作是对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。

import numpy as np

math = np.array([101, 109, 115, 108, 118, 118])
en = np.array([117, 105, 118, 108, 98, 109])
total = np.array([621, 623, 620, 620, 615, 615])
sort_total = np.lexsort((en, math, total))  #以total的索引来代替数值排序
print('排序后的索引值')
print(sort_total)
print('通过排序后的索引获取排序后的数组:')
print(np.array([[en[i], math[i], total[i]] for i in sort_total]))

image.png