一、numpy
用NumPy快速处理数据
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
矩阵运算
jupyter快捷键
1、ndarray 对象
ndarray 实际上是多维数组的含义。
在 NumPy 数组中,维数称为秩(rank),一维数组
的秩为 1,二维数组的秩为 2,以此类推。在 NumPy 中,每一个线性的数组称为一个轴
(axes),其实秩就是描述轴的数量。
创建数组
# 引入numpy模块 import numpy as np # 创建二维数组 array = np.array([[1,2,3],[4,5,6]]) print(array,type(array)) [[1 2 3] [4 5 6]] <class 'numpy.ndarray'>
获取数组属性值
# ndim 维度的数量 print('维度的数量',array.ndim) # 维度 print('维度',array.shape) # 数组元素的个数 print('数组元素的个数',array.size) # 对象元素的类型 print('对象元素的类型',array.dtype) # 对象每个元素的大小、以字节为单位 print('对象每个元素的大小、以字节为单位',array.itemsize) # 对象内存信息 print(' 对象内存信息',array.flags)
特殊函数创建
关键字
array:创建数组
dtype:指定数据类型
zeros:创建数据全为0
ones:创建数据全为1
empty:创建数据接近0
arange:按指定范围创建数据
linspace:创建线段
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 创建全零数组 # 数据全为0,3行4列 # 默认为float a = np.zeros((3,4)) print(a) print(a.dtype) [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] float64 # 创建全为1的数组, 同时也能指定这些特定数据的 dtype: a = np.ones((3,4),dtype=np.int) print(a) print(a.dtype) [[1 1 1 1] [1 1 1 1] [1 1 1 1]] int32 # 创建全空数组, 其实每个值都是接近于零的数: a = np.empty((3,4)) print(a) print(a.dtype) [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] float64 # 用 arange 创建连续数组: # 10-19 的数据,2步长 arange用来创建数组 a = np.arange(10,20,2) print(a) print(a.dtype) [10 12 14 16 18] int32 # 使用 reshape 改变数据的形状 # 3行4列 ,0到11 a = np.arange(12).reshape((3,4)) print(a) print(a.dtype) [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] int32 # 用 linspace 创建线段型数据: # 开始端为1 ,结束端10,且分割成20个数据,生成线段 a = np.linspace(1,10,20) print(a) print(a.dtype)
结构数组
# 结构数组 import numpy as np # 定义数组结构 # persontype = np.dtype({ # 'names':['name', 'age', 'chinese', 'math', 'english'], # 'formats':['S32','i', 'i', 'i', 'f']}) # 也可以这样定义 persontype = np.dtype( [('name','S32'),( 'age','i'), ('chinese','i'), ('math','i'), ('english','i')] ) 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)
print(peoples)
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))
28.25 77.5 93.25 93.5
创建随机数组
random.random()函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。
指定范围和形状的随机浮点数数组
数组的数据类型
算数运算
通过 NumPy 可以自由地创建等差数组,同时也可以进行加、减、乘、除、求 n 次方和取余数。 # 通过 NumPy 可以自由地创建等差数组,同时也可以进行加、减、乘、除、求 n 次方和取余数。 x1 = np.arange(1,11,2) x2 = np.linspace(1,9,5) print('x1:',x1) print('x2:',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)) x1: [1 3 5 7 9] x2: [1. 3. 5. 7. 9.] [ 2. 6. 10. 14. 18.] [0. 0. 0. 0. 0.] [ 1. 9. 25. 49. 81.] [1. 1. 1. 1. 1.] [1.00000000e+00 2.70000000e+01 3.12500000e+03 8.23543000e+05 3.87420489e+08] [0. 0. 0. 0. 0.]
在取余函数里,你既可以用 np.remainder(x1, x2),也可以用 np.mod(x1, x2),结果是一
样的。
ndarray数组运算
(1)数组与标量之间的运算作用于数组的每一个元素
a = np.arange(24).reshape(6,4) print(a+1) print(a*10)
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117140231638-1219851529.png)
# 计算A^2+B^2
import numpy as np
A=[1,2,3]
B=[4,5,6]
a1 = np.array(A)
a2 = np.array(B)
a1**2+a2**2
--------------------------------------------------------------------------------------------
统计函数
最大值、最小值、平均值,是否符合正态分布,方差、标准差多少等等。它们可以让你更清楚地对这组数据有认知。
计数组 / 矩阵中的最大值函数 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)) print(np.amin(a,1)) print(np.amax(a)) print(np.amax(a,0)) print(np.amax(a,1))
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117140501579-2060778967.png)
对于一个二维数组 a,amin(a) 指的是数组中全部元素的最小值,
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117145149383-1778287390.png)
amin(a,0) 是延着 axis=0 轴的最小值,axis=0 轴是把元素看成了 [1,4,7], [2,5,8], [3,6,9] 三个元素,所以最小值为 [1,2,3],
amin(a,1) 是延着 axis=1轴的最小值,
axis=1 轴是把元素看成了 [1,2,3], [4,5,6], [7,8,9] 三个元素,所以最小值为 [1,4,7]。
同理 amax() 是计算数组中元素沿指定轴的最大值。
统计最大值与最小值之差 ptp()
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(np.ptp(a)) print(np.ptp(a,0)) print(np.ptp(a,1))
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117140922722-1387264712.png)
统计数组的百分位数 percentile()
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(np.percentile(a, 50)) print(np.percentile(a, 50, axis=0)) print(np.percentile(a, 50, axis=1))
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117144002233-664794037.png)
同样,percentile() 代表着第 p 个百分位数,这里 p 的取值范围是 0-100,如果 p=0, 那么就是求最小值,如果 p=50 就是求平均值,如果 p=100 就是求最大值。同样你也可 以求得在 axis=0 和 axis=1 两个轴上的 p% 的百分位数。
统计数组中的中位数 median()、平均数 mean()
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) # 求中位数 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))
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117144217816-783334534.png)
统计数组中的加权平均值 average()
a = np.array([1,2,3,4]) wts = np.array([1,2,3,4]) print(np.average(a)) print(np.average(a,weights=wts))
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117144452327-1397329457.png)
average() 函数可以求加权平均,加权平均的意思就是每个元素可以设置个权重,默认情 况下每个元素的权重是相同的,所以 np.average(a)=(1+2+3+4)/4=2.5,你也可以指定 权重数组 wts=[1,2,3,4],这样加权平均 np.average(a,weights=wts)= (1*1+2*2+3*3+4*4)/(1+2+3+4)=3.0。
统计数组中的标准差 std()、方差 var()
a = np.array([1,2,3,4]) print(np.std(a)) print(np.var(a))
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117144700595-1762379289.png)
NumPy 排序
a = np.array([[4,3,2],[2,4,1]]) print(np.sort(a)) print() print(np.sort(a, axis=None)) print() print(np.sort(a, axis=0)) print() print(np.sort(a, axis=1))
![](https://img2018.cnblogs.com/i-beta/1447456/201911/1447456-20191117145047225-684388096.png)
求和sum
# 求和 a2 = np.arange(24).reshape(4,6) a2 print(a2.sum())#整体求和 print(a2.sum(axis=0))#对纵向求和 print(a2.sum(axis=1))#对横向求和
悟已往之不谏,知来者之可追。