Numpy(三)Numpy的函数与排序

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.正态分布曲线

Numpy(三)Numpy的函数与排序_第1张图片

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]]



你可能感兴趣的:(numpy)