一.运算和通用函数
1.算术运算
数组支持加减乘除四则运算
除法也是一样
原则上讲,只有形状相同的数组才能进行四则运算;但是可以通过 “广播”的形式进行临时转换,使其可以进行运算
从上面的实验可以清楚看到,不同形状之间不能进行运算;
但是当数组最内部元素个数相同时,通过广播,就可以进行运算了;而且数组还可以和列表进行运算,算法相同
2.比较运算和逻辑运算
(1)比较运算和4则运算相同,比较的是内部元素
同样的,当内部元素数量不同时,也不能比较;
进行bool值比较时,False默认为0,而True默认为1;
这里用 logical_or,and代替了Python中的and和or,其中 ‘or’ 相当于取并集, ’and’相当于取交集。
(2)逻辑运算也很简单
np.any(a,axis=None,out=None) a是类数组对象,只要a中有一个元素是True,则返回True,否则返回False
np.all(a,axis=None,out=None) 指定所有元素
3.通用函数
这是一些内置函数,由一元函数和二元函数组成
一元函数
三角函数和反三角函数:np.sin,np.cos,np.tan np.arcsin,np.arccos,np.arctan
平方根:np.sqrt
计算自然指数:np.exp
计算对数:np.log2,np.log10
二元函数
得到余数:np.remainder
返回倒数(不要使用整数型):np.reciprocal
四舍五入:np.round
返回对象符号:np.sign
一个例子如下
此处的decimals参数是保留几位有效数字
下面的例子是验证 sinx2+cosx2==1
因为刚才a是一个有11个元素的数组,所以返回的数组也有11个元素,且都是1
out参数作用
先创建一个空数组m,用来存放b除以a的余数
并且a,b,m的形状要相同
此处声明m是将结果存放在m中
4.自定义通用函数
因为numpy内置函数远远不能满足现实的需要,所以设计者可以自定义通用函数
这里自定义了一个体质指数,用来判断人的胖瘦
def bmi(height,weight):
bmindex=weight/height**2
if bmindex>18 and bmindex<25:
return 0
elif bmindex<=18:
return -1
else:
return 1
bmi(2,70)
返回值是-1 表明此人偏瘦
因为数据分析的对象是大多数,所以不可能逐个带入,所以我们设计了针对数组的测试方法
假设身高的范围是[ 1.5,2.1) 体重的范围是[ 30,100) 用随机数来完成
先看随机数的用法
生成的是在(0,1)之间的10个随机数
然后就该对数组操作了
第一个是用功能强大的列表解析完成的
第二个才是我们的目标
这里必须要解释一下 frompyfunc函数
frompyfunc(func,nin,nout)
~func:Python中定义的函数对象(不是执行函数)
~nin:一个整数,表示func函数所接收的参数个数
~nout:一个整数,表示func函数返回的对象个数
例:
pow是求幂函数,返回的是0,1,2,3,4,5的0,1,2,3,4,5次方
可能有人会问,这直接调用pow函数就行,何必要用func函数呢
其实这个例子只是为了理解通用函数的特点,即通过该函数转化后,
bmi函数的参数可以是数组;如果不转化会报错
还有一个方法能将Python函数转化成通用函数如下
此函数和 frompyfunc函数相同,其作用是将bmi ( )函数矢量化,之后就可以接收数组作为参数了;
并且能通过 otypes 的值设置返回数组的元素类型
二.简单统计应用
1.正太分布
np.random.normal (loc,scale,size)
loc:浮点数,分布的平均值
scale:浮点数,分布的标准差
size:整数或者整数元素的元组,输出的数据个数,默认为None
当loc==0,scale==1时,称为标准正太分布
这里有两种表达方式
生成的都是标准正太分布中的100个随机点
2.简单的统计函数
函数 说明
np.mean,np.average 计算平均值、加权平均值
np.var 计算方差
np.std 计算标准差
np.min,np.max 计算最小值、最大值
np.argmin,np.argmax 返回最小值、最大值的索引
np.ptp 计算全距,即最小值和最大值的差
np.percentile 计算百分位在统计对象中的值
np.median 计算统计对象的中值
np.sum 计算统计对象的和
调用时,np.mean( )填入对象即可,对象可以是元组,数组,列表,单个数字等
这些函数可以和前面学过的函数综合应用
比如沿1轴和0轴方向求平均值
我们已经知道,如果以布尔类型的数组作为下标,则可以根据要求返回相应元素
这里np.where( )函数也非常好用
返回1代表满足前面不等式,-1则代表不满足
当然,也可以只写条件,那么返回的就是由元素索引组成的数组如下
相信你也看出来了,np.mean (a) 和 a.mean( ) 是一个意思,两种表达。
Numpy中的 np.select( )则能够实现多分支判断和选择
比如我们规定,高于平均值0.3的为A,高于平均分但不足0.3的为B,其余为C
和前面的一样,我们能够给目标赋予我们想要的结果,当都不满足条件时,默认返回值是0
不得不说,没什么区别,希望这些对大家有帮助