Numpy(三)Numpy的函数与排序
一、通用函数
*通用函数使得Numpy数组操作用于数组中的每一个函数。它通常用C语言实现,可以提升执行效率。
1.1数学运算函数
1.1.1算数运算函数:通常使用的加、减、乘、除、乘方等数学运算符号
①数学运算可以通过符号进行运算
import numpy as np
a=np.array([1,2,3,4,5,6])
b=np.array([2,4,6,8,10,12])
print('加法:',a+b)
print('减法:',a-b)
print('乘法',a*b)
print('除法',a/b)
print('乘方',a**2)
加法: [ 3 6 9 12 15 18]
减法: [-1 -2 -3 -4 -5 -6]
乘法 [ 2 8 18 32 50 72]
除法 [0.5 0.5 0.5 0.5 0.5 0.5]
乘方 [ 1 4 9 16 25 36]
②使用算数运算函数进行运算
通用函数名称 |
说明 |
add() |
y=a+b 加法运算 |
subtract() |
y=a-b 减法运算 |
multiply() |
y=a*b 乘法运算 |
divide() |
y=a/b 除法运算 |
floor_divide() |
y=a//b 整除运算 |
power() |
y=a**b 乘方运算 |
操作:
import numpy as np
a=np.array([1,2,3,4,5,6])
b=np.array([2,4,6,8,10,12])
c=np.add(a,b)
d=np.subtract(a,b)
e=np.multiply(a,b)
f=np.divide(a,b)
g=np.floor_divide(a,b)
h=np.power(a,b)
print('加法',c)
print('减法',d)
print('乘法',e)
print('除法',f)
print('整除',g)
print('乘方',h)
加法 [ 3 6 9 12 15 18]
减法 [-1 -2 -3 -4 -5 -6]
乘法 [ 2 8 18 32 50 72]
除法 [0.5 0.5 0.5 0.5 0.5 0.5]
整除 [0 0 0 0 0 0]
乘方 [ 1 16 729 65536 9765625 -2118184960]
1.1.2关系运算函数——将两个数组对应元素进行逻辑运算,结果用布尔值表示
①用符号进行运算
import numpy as np
a=np.array([1,22,54,6,109,65])
b=np.array([22,14,96,6,82,125])
print(a==b)
print(a<b)
print(a>b)
print(a!=b)
print(a<=b)
print(a>=b)
[False False False True False False]
[ True False True False False True]
[False True False False True False]
[ True True True False True True]
[ True False True True False True]
[False True False True True False]
②使用关系函数进行运算
通用函数 |
说明 |
equal() |
a==b |
not_equal() |
a!=b |
less() |
a
|
less_equal() |
a<=b |
greater() |
a>b |
greater_equal() |
a>=b |
import numpy as np
a=np.array([1,22,54,6,109,65])
b=np.array([22,14,96,6,82,125])
c=np.equal(a,b)
d=np.not_equal(a,b)
e=np.less(a,b)
f=np.less_equal(a,b)
g=np.greater(a,b)
h=np.greater_equal(a,b)
print('两数组对应元素是否相等?',c)
print('两数组对应元素是否不相等?',d)
print('数组a的元素是否小于b?',e)
print('数组a的元素是否小于等于b',f)
print('数组a的元素是否大于b',g)
print('数组a的元素是否小于等于b',h)
两数组对应元素是否相等? [False False False True False False]
两数组对应元素是否不相等? [ True True True False True True]
数组a的元素是否小于b? [ True False True False False True]
数组a的元素是否小于等于b [ True False True True False True]
数组a的元素是否大于b [False True False False True False]
数组a的元素是否小于等于b [False True False True True False]
2.自定义通用函数
1.自定义函数的特点:可以通过通用函数(ufunc)对数组内每一个函数进行操作处理。
2.语法格式:
ufunc=numpy.frompyfunc(func,nin,nout)
其中:func可以是任何的python内置函数,也可以是自定义的函数
nin是传入数组的参数个数
nout返回数组的个数
二、其他函数
1.随机数
①随机数函数
A.常用随机数
1.随机浮点数,返回[0.0,1.0)随机浮点数,即大于等于0.0小于1.0
numpy.random.rand()
2.返回[low,high)随机整数,如果high省略则返回[0,low)的随机整数
numpy.random.randint(low,high,size,dtype)
*实例
1.一维随机浮点型数组
import numpy as np
a=np.random.rand(6)
print(a)
print(a.dtype)
[0.71008962 0.9789184 0.85169683 0.35812926 0.14769591 0.59963349]
float64
2.二维随机浮点型数组
import numpy as np
a=np.random.rand(3,2)
print(a)
print(a.size)
print(a.dtype)
print(a.shape)
[[0.88644622 0.44110475]
[0.09019004 0.4413119 ]
[0.3187254 0.91479723]]
6
float64
(3, 2)
3.确定范围的一维随机整数数组(25-100)
import numpy as np
a=np.random.randint(25,100,10,dtype=int)
print(a)
[88 92 69 68 62 93 76 36 82 98]
4.确定范围的二维随机整数数组(25-100)
import numpy as np
a=np.random.randint(25,100,(3,3),dtype=int)
print(a)
[[92 48 39]
[46 60 64]
[45 89 60]]
B.正态分布随机数
1.正态分布:
1.正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution),最早由棣莫弗(Abraham de Moivre)在求二项分布的渐近公式中得到。C.F.高斯在研究测量误差时从另一个角度导出了它。P.S.拉普拉斯和高斯研究了它的性质。是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。
2.正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。
3.若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
2.正态分布曲线
3.返回标准正态分布随机数:返回标准正态分布随机数,参数与rand函数相同。(标准正态分布平均数为0,标准值为1)
numpy.random.randn()
4.返回正态分布,loc是平均值,scale是标差。
numpy.random.normal(loc,scale,size)
*实例
1.创建一个(3*3)的标准正态分布随机数组
import numpy as np
a=np.random.randn(3,3)
print(a)
[[-1.26898639 0.96284579 -0.64463162]
[-0.24216331 0.6258301 0.02254831]
[-1.13563563 1.58121951 -0.32983854]]
2.创建一个(3*3)的正态分布数组,平均值为5标准差为2
import numpy as np
a=np.random.normal(5,2,(3,3))
print(a)
[[9.37195124 7.81048746 7.88487784]
[8.11798244 5.51997449 5.83350753]
[4.60237048 7.26362544 3.27421218]]
三、排序函数
1.轴排序:按照轴对数组进行排序函数sort,将同一轴上的数按照指定顺序排列。
2.语法格式:
numpy.sort(a,axis,kind,order)
1.a:要排序的数组
2.axis:数组的轴,按指定轴进行排序,默认是-1表示最后一个轴。
3.kind:表示排序的类型(快速排序、希尔排序、堆排序、冒泡排序、二路归并排序)
排序类型 |
代码 |
快速排序 |
quicksort |
归并排序 |
mergesort |
堆排序 |
heapsort |
4.order:排序字段
3.实例
*对[1,3,4,2,11,5,6,9,8]进行排序
import numpy as np
a=np.array([1,3,4,2,11,5,6,9,8])
b=np.sort(a)
print(b)
[ 1 2 3 4 5 6 8 9 11]
*对二维数组的横向轴进行排列(axis=1)
import numpy as np
a=np.array([[120,6,35,78],[53,95,47,96],[2,43,652,3523],[484,45694,5566,6798]])
b=np.sort(a,axis=1)
print('原来数组为:',a)
print('经过排序的数组为:',b)
原来数组为: [[ 120 6 35 78]
[ 53 95 47 96]
[ 2 43 652 3523]
[ 484 45694 5566 6798]]
经过排序的数组为: [[ 6 35 78 120]
[ 47 53 95 96]
[ 2 43 652 3523]
[ 484 5566 6798 45694]]
*对二维数组的纵轴进行纵向排列(axis=0)
import numpy as np
a=np.array([[120,6,35,78],[53,95,47,96],[2,43,652,3523],[484,45694,5566,6798]])
b=np.sort(a,axis=0)
print('原来数组为:',a)
print('经过排序的数组为:',b)
原来数组为: [[ 120 6 35 78]
[ 53 95 47 96]
[ 2 43 652 3523]
[ 484 45694 5566 6798]]
经过排序的数组为: [[ 2 6 35 78]
[ 53 43 47 96]
[ 120 95 652 3523]
[ 484 45694 5566 6798]]
四、聚合函数
1.求和函数(sum)
求和函数:对数组内规定的某轴上的每一个元素进行求和运算
2.语法格式
方法一:使用numpy.sum()
numpy.sum(a,axis=None)
*实例
一维数组
import numpy as np
a=np.array([142,334,844,54,535,24,442,34,632,5342,43,75,33,23,12])
b=np.sum(a)
print(b)
8569
二维数组
import numpy as np
a=np.array([[1,321,532],[23,987,678],[90,832,675]])
b=np.sum(a,axis=1)
c=np.sum(a,axis=0)
print('原数组:',a)
print('按行求和',b)
print('按列求和',c)
原数组: [[ 1 321 532]
[ 23 987 678]
[ 90 832 675]]
按行求和 [ 854 1688 1597]
按列求和 [ 114 2140 1885]
2.最大值函数(max)
1.最大值函数:对数组内规定的某轴上的元素找出其最大值。
2.语法格式
①使用numpy.amax()
import numpy as np
a=np.array([1,52,63,45,69,22,0,13,2,54,89,6,14])
b=np.amax(a)
print('The max number is ',b)
The max number is 89
import numpy as np
a=np.array([[1,52,63],[45,69,22],[0,13,2],[54,89,6]])
b=np.amax(a,axis=0)
print('The max number is ',b)
The max number is [54 89 63]
②使用numpy.nanmax()——此函数可以忽略NAN(Not a number,非数)
import numpy as np
a=np.array([[1,52,63],[45,69,22],[0,13,np.nan],[54,89,6]])
b=np.nanmax(a,axis=0)
print('The max number is ',b)
print(a)
The max number is [54. 89. 63.]
[[ 1. 52. 63.]
[45. 69. 22.]
[ 0. 13. nan]
[54. 89. 6.]]
//其中,np.nan表示一个非数元素。
3.最小值函数(min)
1.最小值函数:对数组内规定的某轴上的元素找出其最小值
2.语法格式:
①使用numpy.amin()
import numpy as np
a=np.array([[1,52,63],[45,69,22],[0,13,666],[54,89,6]])
b=np.amin(a,axis=0)
print('The min number is ',b)
print(a)
The min number is [ 0 13 6]
[[ 1 52 63]
[ 45 69 22]
[ 0 13 666]
[ 54 89 6]]
②使用numpy.nanmin()——性质同numpy.nanmin()
import numpy as np
a=np.array([[1,52,63],[45,69,22],[0,13,np.nan],[54,89,6]])
b=np.nanmin(a,axis=0)
print('The min number is ',b)
print(a)
The min number is [ 0. 13. 6.]
[[ 1. 52. 63.]
[45. 69. 22.]
[ 0. 13. nan]
[54. 89. 6.]]
4.平均值函数(mean)
1.平均值函数:对数组内规定的某轴上的元素求和在除元素个数
2.语法规则:
*对二维数组整体求平均数
import numpy as np
a=np.array([[1,4,6],[22,53,43],[65,76,54]])
b=np.mean(a)
print(b)
36.0
*对二维数组行求平均数
import numpy as np
a=np.array([[1,4,6],[22,53,43],[65,76,54]])
b=np.mean(a,axis=1)
print(b)
[ 3.66666667 39.33333333 65. ]
*对二维数组列求平均数
import numpy as np
a=np.array([[1,4,6],[22,53,43],[65,76,54]])
b=np.mean(a,axis=0)
print(b)
[29.33333333 44.33333333 34.33333333]
5.加权平均数函数(average)
1.加权平均数:对数组内某轴上的元素附有一定的权值,得出结果为(次数*权值)
2.语法规则:
*对整体求加权平均数
import numpy as np
a = np.array([1, 3, 5, 7, 9])
b = np.average(a, weights=[0.1, 0.2, 0.5, 0.1, 0.1])//weights为一个数组,数组内为每一个数对应的权重。
print(b)
4.800000000000001
6.剔除多余元素的函数(unique)
1.剔除多于函数:unique函数可以剔除数组内多余的函数并且从小到大将元素排列。
2.语法格式:
numpy.unique(a,return_index=False,axis=None)
标志 |
属性 |
a |
原始数组 |
return_index |
若设置为Ture则返回原始数组中的索引数组 |
axis |
轴 |
3.实例
①将一维数组内部的数字去重后排序
import numpy as np
a=np.array([1,3,2,4,3,12,656,2,3,3,53,512,534,132,33,52,3,2,1,3,44,554,343])
b=np.unique(a)
print(b)
[ 1 2 3 4 12 33 44 52 53 132 343 512 534 554 656]
②将二维数组中列去重后排序
import numpy as np
a=np.array([[1,3,2,4],[3,12,656,2],[3,3,53,512],[534,132,33,52],[3,2,1,3],[4,554,343,646]])
b=np.unique(a,axis=0)
print(b)
[[ 1 3 2 4]
[ 3 2 1 3]
[ 3 3 53 512]
[ 3 12 656 2]
[ 4 554 343 646]
[534 132 33 52]]