配置:python 3.6.5
IDE:pycharm
python第三方库——Numpy库(numerical python)
1、Numpy库
Numpy库是一个用于数据科学计算基础的库,它提供类似数组的数据结构ndarray(多维数组类型),但是比python的数组更加高效. 因为numpy将数组存储在一个均匀连续的内存块中,不需要对内存地址进行查找,节省了计算资源。
进行重复操作时,numpy使用的是一种矢量化计算,相比于python原来的循环计算,在这个速度爆炸的时代,使得处理速度大大加快。
Nympy里有两个重要的对象:ndarray和ufunc
查看Numpy的版本:
import numpy as np
np._version_
2、ndarray对象
ndarray实际上是多维数组,在numpy中,维数称为秩,每个线性的数组称为一个轴,秩是描述轴的数量。
2.1 创建ndarray
注意:(1)、ndarray的下标从0开始
(2)、一个numpy数组中的数据类型必须相同的
import numpy as np #导入numpy库并且简单记为np
a = np.array([1, 2, 3]) #创建ndarray,一维数组
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 二维数组
b[1,1]=10
print(a.shape)
print(b.shape) #获取b数组的形状
print(a.dtype) #获取a中元素的数据类型
print(b)
结果解释:
(3,) 表示一维数组,一个数组里有3个元素
(3, 3) 分别表示行数和列数
2.2 结构数组
import numpy as np
persontype = np.dtype({ #用dtype定义结构数组类型
'names':['name', 'age', 'chinese', 'math', 'english'],
'formats':['S32','i', 'i', 'i', 'f']}) #数据类型
peoples = np.array([("ZhangFei",32,75,100, 90),("GuanYu",24,85,96,88.5),
("ZhaoYun",28,85,92,96.5),("HuangZhong",29,65,85,100)],
dtype=persontype) #使用自定义的数据类型
ages = peoples[:]['age']
chineses = peoples[:]['chinese']
maths = peoples[:]['math']
englishs = peoples[:]['english']
print(np.mean(ages))
print(np.mean(chineses))
print(np.mean(maths))
print(np.mean(englishs))
3、ufunc运算(通用函数,是对ndarray中的数据执行元素级运算的函数)
可以对数组中每个元素进行操作,因为是用C语言实现的,所以计算速度非常快。
3.1 连续数组的创建
import numpy as np
x1 = np.arange(1,11,2) #arange(初始值、终值、步长),默认不包括终值,步长可以为小数,默认为1
x2 = np.linspace(1,9,5) #linspace(初始值、终值、步长),默认包括终值
x3 = np.ones(shape=(3,2)) #shape onces创建数值全为1的数组,且需要给定形状
x4 = np.ones_like(x3) #创建一个与已知的数组类型相同的另一个值全为1的数组
x5 = np.zeros((3,1)) #zeros和ones函数类似,创造值全为0的数组
x6 = np.empty((5,3,2)) #创建一个没有初始化值的不确定值的数组,标记内存空间可用
3.2 算术运算
import numpy as np
x1 = np.arange(1,11,2)
x2 = np.linspace(1,9,5)
print(x1)
print(x2)
print(np.add(x1, x2)) #+
print(np.subtract(x1, x2)) #-
print(np.multiply(x1, x2)) #*
print(np.divide(x1, x2)) #/
print(np.power(x1, x2)) #乘方
print(np.remainder(x1, x2)) #取余数
np.mod(x1, x2)
3.3 统计函数
获取有关数据的描述性统计分析 最大值函数 amax(),最小值函数 amin()。
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(np.amin(a))
print(np.amin(a,0)) #0表示axix=0,跨行,沿着axix=0的轴是把元素看成了[1,2,3],[4,5,6],[7,8,9]
print(np.amin(a,1)) #1表示axix=1,跨列,沿着axix=1的轴是把元素看成了[1,4,7],[2,5,8],[3,6,9]
print(np.amax(a))
print(np.amax(a,0))
print(np.amax(a,1))
最大值与最小值之差ptp()
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a)
print(np.ptp(a))
print(np.ptp(a,0))
print(np.ptp(a,1))
百分位数percentile()
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(np.percentile(a, 50)) #50指的是p,代表第几个百分位数,取值范围是0~100,如果p=0,取的是最小值,p=50取的是平均数
print(np.percentile(a, 50, axis=0))
print(np.percentile(a, 50, axis=1))
中位数median(),平均数mean()
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
# 求中位数
print(a)
print(np.median(a))
print(np.median(a, axis=0))
print(np.median(a, axis=1))
# 求平均数
print(np.mean(a))
print(np.mean(a, axis=0))
print(np.mean(a, axis=1))
加权平均值average()
import numpy as np
a = np.array([1,2,3,4])
wts = np.array([1,2,3,4])# print(np.average(a))
print(np.average(a,weights=wts)) #=(1*1+2*2+3*3+4*4)/(1+2+3+4)=3
标准差和方差(var()&std())
import numpy as np
a = np.array([1,2,3,4])
print(a)
print(np.std(a)) #标准差,方差开根号,代表一组数据的离散程度
print(np.var(a)) #方差,每个数字与平均数的差的平方和的平均值
numpy排序
import numpy as np
a = np.array([[4,3,2],[2,4,1]])
print(a)
print(np.sort(a))
print(np.sort(a, axis=None))
print(np.sort(a, axis=0))
print(np.sort(a, axis=1))
练习题
对以下几个人的成绩做描述性分析,并且对总成绩进行排名.
import numpy as np
persontype = np.dtype({
'names':['name', 'chinese', 'english', 'math','total'],
'formats':['S32','i', 'i', 'i','i']})
peoples = np.array([("ZhangFei",66,65,30,0),("GuanYu",95,85,98,0),
("ZhaoYun",93,92,96,0),("HuangZhong",90,88,77,0),("DianWei",80,90,90,0)],
dtype=persontype)
print(peoples)
chineses = peoples[:]['chinese']
maths = peoples[:]['math']
englishs = peoples[:]['english']
print(np.amin(chineses))
print(np.amin(maths))
print(np.amin(englishs))
print(np.amax(chineses))
print(np.amax(maths))
print(np.amax(englishs))
print(np.std(chineses))
print(np.std(maths))
print(np.std(englishs))
print(np.var(chineses))
print(np.var(maths))
print(np.var(englishs))
peoples[:]['total'] = peoples[:]['chinese']+peoples[:]['english']+peoples[:]['math']
print(np.sort(peoples, order='total')) #新增加一列total列,并且使用sort()方法按照total进行排序