配置: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))

 

练习题

对以下几个人的成绩做描述性分析,并且对总成绩进行排名.

array保存mat python python array库_python

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进行排序