大纲:
1.numpy基本使用
1.1读取数据
在实际开发中,我们需要从文件中读取数据,并进行处理。在numpy中,提供了一系列函数从文件中读取内容并生成矩 阵,对于txt,csv格式的文件,常用的函数为loadtxt().
#文件的读取
import numpy as np
data = np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float)
data
注意:
delimiter:字段间隔符
skiprows:省略的行
dtype:数据类型
运行截图:
1.2创建数组
1.2.1使用array函数创建数组
#使用array创建数组
data1 = np.array([1,2,3])
print(data1)
运行截图:
data2 = np.array(list('abcd'))
print(data2)
运行截图:
data3 = np.array([[1,2],[3,4]])
print(data3)
运行截图:
1.2.2使用arange函数生产数组
#使用arange函数生成数组
a = np.arange(10) #生成0-9的数组
print(a)
运行截图:
x = np.arange(10,20,2) #生成10-20之间步长为2的一维数组
print(x)
1.2.3使用zeros函数生产全0数组
运行截图:
#使用zero函数生成全0数组
a = np.zeros(10,dtype=int)
print(a)
运行截图:
b = np.zeros((4,4),dtype=float) #生成一个四行四列的二维数组
print(b)
运行截图:
1.3查看数据集的相关属性
实例1:
import numpy as np
data = np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float)
print(data.shape) #计算数据的形状
print(data.dtype)#查看数据的类型
print(data.T)#转置数据集
print(data.ndim)#查看数据集的维度
运行截图:
实例2:
import numpy as np
a = np.arange(15)
print(a)
b = a.reshape(3,5)#改变维度
print(b)
print(b.ndim)
运行截图:
2.数据操作
2.1数据的合并
2.1.1上下合并
方法1:np.vstack((data1,data2))
方法2:np.row_stack((data1,data2))
#上下合并
A = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
B = np.array([[12,13,14,15],[16,17,18,19]])
row_AB = np.row_stack((A,B))
print(row_AB)
运行截图:
2.1.2左右合并
方法1:np.hstack((data1,data2))
方法2: np.column_stack((data1,data2))
#左右合并
A = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
B = np.array([[12],[13],[ 14]])
col_AB = np.column_stack((A,B))
print(col_AB)
运行截图:
2.2数据的切片
数组的内容可以通过索引或切片来获取,与 Python 中 list 的切片操作一样。数组可以基于 0 - n 的下标进行索引, 设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。
2.2.1一维数组
一维数组的切片方法完全同列表切片
#一维数组的切片
import numpy as np
a = np.array([5,6,7,8,9]) #创建一个一维数组
print("获取第一个位置元素:",a[0])#获取第一个位置元素
print("获取倒数第一个元素:",a[-1])#获取倒数第一个元素
print("获取第二个和第三个元素:",a[1:3])
print("获取所有的元素:",a[:])
运行截图:
2.2.2二维数组
我们以一个6*6的数组a为例来讲解二维数组如何切片:
import numpy as np
a = np.arange(1,37).reshape((6,6))
print(a)
运行截图:
我们可以给此数组a建立索引:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JnkNg63D-1663662723462)(D:/Users/tianzi/Pictures/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/numpyback1.png)]
2.2.2.1获取单行数据
import numpy as np
#获取单行数据
a = np.arange(1,37).reshape(6,6)
print(a)
#获取单行数据
print("获取第一行数据:",a[0])
print("获取第一行数据:",a[-6])
运行截图:
2.2.2.2获取多行数据
import numpy as np
a = np.arange(1,37).reshape(6,6)
print(a)
#获取多行数据
print("获取多行数据:",a[[2,3,4]])
运行截图:
2.2.2.3获取某个元素
import numpy as np
a = np.arange(1,37).reshape(6,6)
print(a)
#获取某个元素
print("获取第四行第五列的数据:",a[3,4])
运行截图:
2.2.2.4获取任意范围的数据
import numpy as np
a = np.arange(1,37).reshape(6,6)
print(a)
#获取任意范围的数据
#获取第2-4行,3-5列的数据
print("获取第2-4行,3-5列的数据",a[1:4,2:5])
print("获取前三行数据",a[0:3,:])
print("获取第2-5列数据:",a[:,1:5])
运行截图:
2.2.3练习
将BeijingPM2.5.csv文件的样本数据切割为训练集(70%)和测试集(30%),并将训练集中的特征和目标(PM2.5)切割开。
参考答案:
import numpy as np
data=np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float)
train_num=int(data.shape[0]*0.7)
test_num=data.shape[0]-train_num
train_data=data[:train_num,:] # 训练集
test_data=data[train_num:,:] # 测试集
x_train=train_data[:,:-1] # 训练集中的特征值数据
y_train=train_data[:,-1] # 训练集中的目标值数据
2.3数据的去重
去除数据集中重复的数据 ,可以使用unique方法,当axis=0时,按行删除。当axis=1时,按列删除。
2.3.1删除重复的行
data = np.unique(data,axis=0)
#删除重复的行
a = np.array([[1,2,3],[4,5,6],[1,2,3],[4,5,6]])
print(a)
print("修改后的数据:")
b = np.unique(a,axis=0)
print(b)
运行截图:
2.3.2删除重复的列
data = np.unique(data,axis=1)
#删除重复的列
b = np.array([[1,5,5],[2,3,3],[3,6,6]])
print(b)
print("修改后的数据:")
c = np.unique(b,axis=1)
print(c)
运行截图:
2.3.3练习
(1)请创建数组A和B,A为2行5列的数组,取值1-10,B为5行5列的数组,取值6-30.
(2)对A和B进行上下合并,得到数组C
(3)对数组C进行按行去重,得到新的数组D,打印D
参考答案:
import numpy as np
# 请创建数组A和B,A为2行5列的数组,取值1-10,B为5行5列的数组,取值6-30.
A = np.arange(1,11).reshape(2,5)
print("打印A数组:")
print(A)
B = np.arange(6,31).reshape(5,5)
print("打印B数组:")
print(B)
#对A和B进行上下合并
print("上下合并A和B得到C:")
C = np.row_stack((A,B))
print("打印C数组:")
print(C)
#对C数组按行去重
D = np.unique(C,axis=0)
print("去重后的数组D:")
print(D)
运行截图:
2.4通用函数
通用函数是一种对ndarry中的数据执行元素级运算的函数,可以看作是简单函数(接受一个或多个标量值,并产生 一个或多个标量值)的矢量化包装器。
2.4.1 abs函数的使用
print(np.abs(12.0))
print(np.abs(12))
print(np.abs(-10))
print(np.abs(5-4j))
运行截图:
2.4.2 sqrt函数的使用
import numpy as np
print(np.sqrt(4))
运行截图:
2.4.3 exp函数的使用
import numpy as np
print(np.exp(2))
运行截图:
2.4.4 modf函数的使用
import numpy as np
print(np.modf([1.5,2.9]))
运行截图:
3.删除指定的行或列
3.1删除指定的行
使用 np.delete(数组,索引,axis=0) 可以进行按行删除。
#删除指定的行
c = np.arange(1,26).reshape(5,5)
print(c)
print("删除第一行:")
m = np.delete(c,0,axis=0)
print(m)
print("删除第2,3行的数据:")
n = np.delete(c,[1,2],axis=0)
print(n)
运行截图:
3.2删除指定的列
使用 np.delete(数组,索引,axis=1) 可以进行按列删除。
arr1=np.arange(1,20,2).reshape(2,5)
print(arr1)
print("删除第一列的数据:")
arr2 = np.delete(arr1,0,axis=1)
print(arr2)
print("删除第1,3列的数据")
arr3 = np.delete(arr1,[2,4],axis=1)
print(arr3)
运行截图:
3.3练习
问题:灰色部分的字段对PM2.5的影响没有或者轻微。考虑将其从数据集中删除。
参考答案:
import numpy as np
data = np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float)
#删除无用的列
data = np.delete(data,[0,1,2,3,4,9,10,13,14],axis=1)
print(data)
运行截图:
4.统计函数介绍
备注:axis = 0:按列求。axis = 1:按行求。如果不设置axis参数,则默认求数据集中所有数的相关值 举例:
x = np.arange(18).reshape(3,6)
print(x.mean()) # 计算整个数组的平均值 # 8.5
print(x.mean(axis=0)) # 计算各列的平均值 # array([ 6., 7., 8., 9., 10., 11.])
print(x.mean(axis=1)) # 计算各行的平均值 # array([ 2.5, 8.5, 14.5])
print(x.std()) # 计算整个数组的标准差 #5.188127472091127
print(x.max()) # 计算整个数组的最大值 #17
运行代码:
练习:
求北京PM2.5数据集中PM10、SO2、NO2、CO的平均值、总和、最大值、最小值。
参考代码:
import numpy as np
data=np.loadtxt("D:\\桌面\\本学期课程\\BeijingPM2.5.csv",delimiter=",",skiprows=1,dtype=float)
a=data[:,:9] # 获取PM10、SO2、NO2、CO数据集
print(a.mean(axis=0)) # 计算均值
print(a.sum(axis=0)) # 计算总和
print(a.max(axis=0)) # 计算最大值
print(a.min(axis=0)) # 计算最小值
运行截图:
5.dot的使用
线性代数中矩阵乘法: np.dot(A,B)或A.dot(B)
举例:
import numpy as np
matrix1 = np.array([[1, 2, 3], [4, 5, 6]])
matrix2 = np.array([[1, 2], [3, 4], [5, 6]])
multi = np.dot(matrix1, matrix2)
print(multi)
运行截图:
6.线性代数函数
NumPy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的函数。
使用方法举例:
A=np.array([[1,3],[2,8]])
x=np.linalg.det(A)
print(x)
7.生成自己的数据集
7.1生成随机的符合正态分布的数据
numpy中的random模块
使用举例:
7.1.1 rand函数
这个函数的参数是数组的维度,取值范围是 [0,1)
x1 = np.random.rand(10)
x2 = np.random.rand(2,3)
print(x1)
print(x2)
运行截图:
7.1.2 randint函数
numpy.random.randint(low, high=None, size=None)
返回随机整数,范围区间为[low,high),包含low,不包含high参数:low为最小值,high为最大值,size为数组维 度大小.
x1= np.random.randint(0,6,10)
x2= np.random.randint(0,9,size=(2,2))
print(x1)
运行截图:
7.1.3 normal函数
x = np.random.normal(0, 0.04, 20)#生成均值为0, 方差为0.04的20个值 t
print(x)
运行截图:
7.2生产均匀间隔的数据
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
其中:
start:起始值
stop:结束值
num:样本数
endpoint:是否包含stop的值
restep:返回步长
dtype:数据类型
举例:
x=np.linspace(2.0, 3.0, num=5)
print(x)
运行截图:
为最大值,size为数组维 度大小.
x1= np.random.randint(0,6,10)
x2= np.random.randint(0,9,size=(2,2))
print(x1)
运行截图:
[外链图片转存中…(img-UwptSyaB-1663662723501)]
7.1.3 normal函数
x = np.random.normal(0, 0.04, 20)#生成均值为0, 方差为0.04的20个值 t
print(x)
运行截图:
[外链图片转存中…(img-nm1dUOpp-1663662723502)]
7.2生产均匀间隔的数据
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
其中:
start:起始值
stop:结束值
num:样本数
endpoint:是否包含stop的值
restep:返回步长
dtype:数据类型
举例:
x=np.linspace(2.0, 3.0, num=5)
print(x)
运行截图: