Numpy入门详细教程
大纲:
文章目录
- 大纲:
- 1.numpy基本使用
- 1.1读取数据
- 1.2创建数组
- 1.2.1使用array函数创建数组
- 1.2.2使用arange函数生产数组
- 1.2.3使用zeros函数生产全0数组
- 1.3查看数据集的相关属性
- 2.数据操作
- 2.1数据的合并
- 2.1.1上下合并
- 2.1.2左右合并
- 2.2数据的切片
- 2.2.1一维数组
- 2.2.2二维数组
- 2.2.2.1获取单行数据
- 2.2.2.2获取多行数据
- 2.2.2.3获取某个元素
- 2.2.2.4获取任意范围的数据
- 2.2.3练习
- 2.3数据的去重
- 2.3.1删除重复的行
- 2.3.2删除重复的列
- 2.3.3练习
- 2.4通用函数
- 2.4.1 abs函数的使用
- 2.4.2 sqrt函数的使用
- 2.4.3 exp函数的使用
- 2.4.4 modf函数的使用
- 3.删除指定的行或列
- 3.1删除指定的行
- 3.2删除指定的列
- 3.3练习
- 4.统计函数介绍
- 5.dot的使用
- 6.线性代数函数
- 7.生成自己的数据集
- 7.1生成随机的符合正态分布的数据
- 7.1.1 rand函数
- 7.1.2 randint函数
- 7.1.3 normal函数
- 7.2生产均匀间隔的数据
- 7.1.3 normal函数
- 7.2生产均匀间隔的数据
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)
运行截图:
Numpy入门详细教程相关推荐
- numpy入门详细教程(一)
本讲主要介绍对numpy库和numpy库的N维数组对象:ndarray的基本了解.更多内容请看numpy入门详细教程(二) numpy: NumPy是一个开源的Python科学计算基础库,包含: • ...
- python数据科学系列:numpy入门详细教程
导读 python数据科学基础库主要是三剑客:numpy,pandas以及matplotlib,每个库都集成了大量的方法接口,配合使用功能强大.平时虽然一直在用,也看过很多教程,但纸上得来终觉浅,还是 ...
- Pandas入门详细教程
作者:luanhz 来源:小数志 导读 本文主要是对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀"的盛誉. 行文二级目录 01 关于 ...
- python数据科学系列:pandas入门详细教程
导读 前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀&q ...
- spring入门详细教程(五)
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
- Spring入门详细教程(四)
前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...
- Spring入门详细教程(三)
前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...
- Spring入门详细教程(二)
前言 本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/1016553 ...
- ThinkJS框架入门详细教程(二)新手入门项目
一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...
最新文章
- 如流智会2021:技术结合场景 让企业知识懂员工
- 清除浏览器缓存之后为什么还是显示旧的html页面_H5缓存机制浅析-移动端Web加载性能优化...
- 回顾2011年最热门的开源PHP项目
- Python 中的闭包、匿名函数、decorator 装饰器与python的偏函数
- 推荐安装的Visual Studio Extensions
- Java代码总结【1】_查询手机号码归属地
- php get获取cookie值,golang web开发获取get、post、cookie参数
- python面向对象中的私有属性和私有化方法
- 【codevs1722】【NOI1997】最优乘车,单元最短路?
- vsftpd虚拟用户使用实验报告
- Python进阶(十)多进程multiprocessing和subprocess模块
- 非要自己开发一个测试工具不可
- 职业生涯规划不会做?首先要知道职引生涯规划!
- 跟着小皮老师了解Go语言LiteIDE详细使用教程❤
- 苹果MFI认证步骤汇总
- 电商平台后台管理系统--->系统详细设计(订单管理模块)
- 陷入瓶颈的中国航空WiFi,还有可能赶英超美吗?
- Windows下网络共享文件夹挂载到wsl系统
- ADI实验室电路:带抗混叠滤波器的宽带接收机
- 杭电ACM 1000题
热门文章
- 【教程】关于各种USB启动模式的解读 MBR、PBR
- upc 8262: LARGEST POINT
- provide和inject的使用方法
- 九、多重曝光 (转自 色影无忌)
- 从女友和老妈的使用角度看精确率(precision)和召回率(recall)的不同
- python第3周(python学习题集)
- html期末作业代码网页设计——火锅烧烤美食山庄(7页) HTML+CSS+JavaScript 网页设计期末作业个人主页
- 猜歌?没有我猜不到的歌!因为我有Python脚本!
- java口袋精灵怎么变强,口袋精灵OL强势来袭 教你打造最强精灵
- 最短路径-图-----练习力扣787. K 站中转内最便宜的航班