版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章:Python 语言入门Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结什么是
Python?Python
是一种解释型的通用高级动态编程语言。解释型语言Python
编译器将源代码(.py)编译为字节码(.pyc),由
Python
解释器解释执行。跨平台性良好。动态编程语言在程序运行过程中能够修改自身程序结构。变量类型在运行过程中动态确定,开发效率高。通用编程语言被称为“胶水语言”,可用于系统运维、Web
开发、GUI
桌面程序、数据科学、人工智能等领域。谭振宇第一章:Python
语言入门2026年05月
06日2/
55什么是
Python?谭振宇第一章:Python
语言入门2026年05月
06日3/
55Python
的优缺点及学习方法优点开源免费,简单易学海量优秀的第三方库,投入产出比极高缺点运行速度慢(解释型语言)程序维护相对困难(动态类型语言)学习方法推荐“先整体,后局部,再整体”的学习方法。首先对全局有了解,其次深挖所需部分,最后通过实践形成自己的理解。谭振宇第一章:Python
语言入门2026年05月
06日4/
55Python
与
Conda
简介官网直接下载的基础环境内置
pip
安装第三方库带有基本的
IDLE
交互界面对于初学者而言,构建合适的开发环境至关重要:Python
编译器环境 Conda
包管理工具卓越的包(库)依赖管理轻松构建、隔离不同的
Python虚拟环境推 荐 使 用 Miniconda 或Anaconda谭振宇第一章:Python
语言入门2026年05月
06日5/
55Shell
与
终端
(Terminal)
环境命令行是进行
Python
高级管理的基础,区分
Shell
与
Terminal:Shell
(命令行解释器):操作系统提供的人机交互接口。如
Windows
的
CMD与
PowerShell,macOS/Linux
的
Bash
与
Zsh。Terminal
(终端,前端交互):与用户交互的软件界面。推荐组合:在
Windows
系统中,推荐使用强大的
Windows
Terminal
搭载
PowerShell
进行开发管理,支持多标签和自定义配置。Mac
系统推荐使用自带的
Terminal
或
iTerm2。谭振宇第一章:Python
语言入门2026年05月
06日6/
55Conda
环境管理常见命令使用
Conda
管理虚拟环境与第三方库,可以有效避免版本冲突:#
1.
创建名为
osgeo
的虚拟环境,指定
Python
3.7conda
create -nameosgeo
python=3.73#
2.
激活虚拟环境
(退出使用
conda
deactivate)condaactivate
osgeo6#
3.
在当前环境中安装
numpy
科学计算库conda
install -channelconda-forge
numpy9#
也可以补充使用
pip
安装一些
Conda
下没有的库pipinstall
numpy其他常用操作:conda
env
list
(查看所有环境),conda
list
(查看已安装包)。谭振宇第一章:Python
语言入门2026年05月
06日7/
55命令行交互与
Jupyter
NotebookIPython
增强型终端支持
Tab
代码提示与自动缩进内置魔术命令(如
%ls,
%cd)通过追加
?
或 ?
快速获取函数帮助文档或源代码JupyterNotebook/
Lab数据科学家首选,网页交互式编程支持Markdown
笔记、LaTeX
公式代码与图表混合、实时呈现数据可视化,适合实验探索与分析谭振宇第一章:Python
语言入门2026年05月
06日8/
55集成开发环境
(IDE):PyCharmIDE
将编辑器、环境管理、调试器等工具有机结合,大幅提升工程开发效率。强大的工程开发支持项目与环境管理:能自动识别并关联
Conda
创建的虚拟环境。深度调试
(Debug):支持可视化打断点(Breakpoints)、逐行与跳出(Step
Over
/
StepInto)、控制台交互查看变量(Console)。代码提示与规范:内置
PEP
8
风格指南检查,变量命名校验(小写加下划线
snake_case和帕斯卡命名
PascalCase
等),一键重构代码格式功能。随着
AI
技术的发展,VSCode
编辑器被广泛应用(Positron,Antigravity
等)谭振宇第一章:Python
语言入门2026年05月
06日9/
55Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结Python
基本数据类型数据结构描述了数据在计算机中的存储和组织方式。Number(数字):分为整型(int)、浮点型(float)以及复数类型(complex)。String(字符串):单引号或双引号引起来的字符序列。Boolean(布尔型):取值仅为
True
和
False。None(空值):表示该对象不存在。Byte(二进制字节):以
b
开头,如
b'hello'。基本数据类型示例String:"Hello",
'NWU'None:
NoneNumber:10,3.14,
1+2jBoolean:True,FalseByte:
b'hello'谭振宇第一章:Python
语言入门2026年05月
06日11/
55Python
基本数据类型高级的数据结构包括:Tuple(元组):不可变的有序数据集合,使用小括号
()。List(列表):可变的有序数据集合,使用方括号
[]。Dictionary(字典):键值对集合,使用花括号
{}。键必须不可变。Set(集合):无序、不重复的元素集合,使用花括号
{}。高级数据结构示例Tuple:(1,2,
'a')Dict:{'k':
'v'}List:[1,2,
'a']Set:{1,2,
3}谭振宇第一章:Python
语言入门2026年05月
06日12/
55Python
基本数据类型数字、字符串、布尔型、元组属于不可变类型;列表、字典、集合属于可变类型。可变与不可变类型示例#
TypeError:
不支持1 t=(1,
2)2 #t[0]=
3修改3s=
"NWU"#
s[0]
=
"n"
#
TypeError:
不支持修改#
成功,lst变为
[3,1 lst=[1,
2]2 lst[0]=
32]34 d={'k':
'v'}5 d['k']
=
'x'
#
成功,d变为
{'k':'x'}谭振宇第一章:Python
语言入门2026年05月
06日13/
55数学运算符Python
支持基础的数学运算:12341+1.0 #加法,输出 2.02.5-0.0 #减法,输出 2.52*3 #乘法,输出 61/2 #除法,输出 0.551//
2#整除(向下取整),输出061%
2#取模(余数),输出 172**
3#乘方运算,输出 8谭振宇第一章:Python
语言入门2026年05月
06日14/
55比较与赋值运算符比较运算符用于大小判断,返回布尔值: =, =,>,<, =, =。赋值运算符
(=)
将右侧值赋给左侧变量。支持与算数运算符结合:1 x=
102 x,y=10,
0.53 x,y=y,
x4 x+=
2#
赋值#
变量的多重赋值#
交换x和y的值#
等价于 x=x+
2谭振宇第一章:Python
语言入门2026年05月
06日15/
55逻辑运算符处理多个布尔值关系的运算符:and
(与)、or
(或)、not
(非)。#返回
False#返回 True#返回 Truex,y=False,
Truexand
yxor
ynot
x56 #
短路逻辑7 10and
208 10or
20#因为 10为真,返回后面的 20#因为
10为真,返回
10,不再判定后面的
20谭振宇第一章:Python
语言入门2026年05月
06日16/
55Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结字符串
(String)
操作字符串是不可变序列,支持切片、索引和运算:a='Hello
'b=
"world!"a+
b4 a*
25 a[0]6 a[-1]7 a[0:3]8 'e'in
a#
拼接运算:'Hello
world!'#
重复运算:'Hello
Hello
'#
索引首字符:'H'#
索引末字符(倒数第一个):'
'#
简单切片:'Hel'#
成员检查:True谭振宇第一章:Python
语言入门2026年05月
06日18/
55字符串的高级用法:切片与
f-String切片操作
(Slice)语法为
[start:stop:step]。起始索引默认
0,终止默认
−1,步长默认
1。1 a[1:-1:2]#
获取索引
1
到
-1(不含)之间,步长为
2
的字符序列f-string
格式化以字母
f
开头,将变量包含在花括号
{}
中,方便拼接和格式化。1 x=
3.14159262 f'PIis
{x:.3}'#
控制有效数字,输出
'PI
is
3.14'谭振宇第一章:Python
语言入门2026年05月
06日19/
55终端输入与输出利用
input()
获取输入,print()
打印输出。age=input('Pleaseinputyourage:
')print(f'Iam{age}years
old.')3#注意:input()函数默认将所有输入处理为字符串
(str)。type(age) #输出 <class
'str'>谭振宇第一章:Python
语言入门2026年05月
06日20/
55Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结列表
(List)
基础概念列表是
Python
最常用的容器之一,支持存储不同类型数据并可随时修改。colls=[1,'good',2.0,
print]print(colls[0],
colls[-1])print(colls[2:])#
访问第一个和最后一个元素#
切片访问从第三个到末尾的所有元素谭振宇第一章:Python
语言入门2026年05月
06日22/
55列表推导式
(List
Comprehension)列表推导式是极具
Python
特色的语法,用于优雅地生成列表:1 nums=[iforiin
range(5)]2 #[0,1,2,3,
4]34 squares=[i**2foriin
range(5)]5 #[0,1,4,9,
16]6#
结合if进行过滤evens=[iforiinnumsifi
%2 =
0]9 #[0,2,
4]谭振宇第一章:Python
语言入门2026年05月
06日23/
55列表的增删改操作掌握对列表元素的动态调整:#尾部添加,变为 [0,1,2,3,
5]#指定位置插入,变为 [100,0,1,2,3,
5]#关键字删除,变为 [0,1,2,3,
5]1 nums=[0,1,2,
3]2nums.append(5)nums.insert(0,
100)56 del
nums[0]78 nums[0]=
-1#赋值修改,变为 [-1,1,2,3,
5]谭振宇第一章:Python
语言入门2026年05月
06日24/
55列表的常用内置函数Python
对列表有丰富的内置支持:#
获取列表长度(元素个数)#
求最值len(nums)max(nums)/
min(nums)3sorted(nums,
reverse=True)
#
返回新的降序列表,不改变原列表nums.sort() #
就地排序,改变原列表67 9in
nums8 nums+[10,
11]#
判断元素是否在列表中#
列表拼接谭振宇第一章:Python
语言入门2026年05月
06日25/
55元组
(Tuple)
结构元组与列表类似,但不可变,一旦创建无法修改内部元素。#
'你好'hello
=
('你好',
'周杰伦')hello
=
tuple(['你好',
'周杰伦'])
#
从列表转为元组3#
元组同样支持索引与切片hello[0]6 nums=(0,1,2,3,
4)7 nums[1:-1:2]#(1,
3)为何使用元组?元组的不可变性保障了数据的安全性,多用于函数的多返回值或固定配置信息的存储。谭振宇第一章:Python
语言入门2026年05月
06日26/
55字典
(Dictionary)
结构字典存储键值对
(Key-Value),通过不可变的键来快速获取对应的值。#
返回键值对个数#
获取键对应的值:'Sunday'1 dates
=
{'星期天':
'Sunday',
'星期一':
'Monday'}2len(dates)dates['星期天']5dates['星期六']
=
'Sat'del
dates['星期六']#
新增或修改键值对#
删除键值对谭振宇第一章:Python
语言入门2026年05月
06日27/
55字典的遍历操作通过内置方法,我们可以灵活地遍历字典的键或值:#
遍历所有的键forkeyin
dates:print(key,
dates[key])4#
同时遍历键和值forkey,valuein
dates.items():print(f'{key} >
{value}')谭振宇第一章:Python
语言入门2026年05月
06日28/
55Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结Python
编码规范良好的编码风格有助于代码维护与协作:使用
4
个空格
进行缩进,不可与
Tab
混用。使用
#
进行单行注释,"""
进行多行注释。变量和函数使用蛇形命名法
(snake_case)。类名使用帕斯卡命名法(PascalCase)。每个顶级函数或类之间建议空两行,提高可读性。谭振宇第一章:Python
语言入门2026年05月
06日30/
55条件结构
(if-elif-else)通过条件分支实现程序的逻辑控制:1 if1>
2:2 print('1大于2')3 elif1<
2:print('1小于2')else:print('1等于2')除了
if-else,进阶语法允许条件嵌套,或利用
in
与
isinstance
做高级判断。谭振宇第一章:Python
语言入门2026年05月
06日31/
55循环结构:while
循环while
循环在条件为
True
时持续执行,也支持与
else
结合(条件变假且正常退出时执行)。i,result=1,
0whilei<
100:result+=
i4 i+=
1else:print(f"Loopfinished,
result={result}")谭振宇第一章:Python
语言入门2026年05月
06日32/
55循环结构:for-in
循环主要用于遍历可迭代对象(列表、元组、字符串等)或使用
range()
构造序列。foriin
range(5):print(i,end='
')3 #
输出:0
1
2
3
44#range(start,stop,
step)foriinrange(3,10,
2):print(i,end='
')8 #
输出:3
5
7
9谭振宇第一章:Python
语言入门2026年05月
06日33/
55循环控制:break
与
continue在满足特定条件时主动控制并改变循环流向。continue:跳过本次循环的剩余语句,直接进入下一次循环。break:完全终止当前所在的循环结构。#跳过
4和
7continueif
i =9:break#
提前结束循环1 foriinrange(1,
10):2 ifiin(4,
7):3456print(i)谭振宇第一章:Python
语言入门2026年05月
06日34/
55迭代器
(Iterator)迭代器是按需提供数据的对象,利用
iter()
和
next()
函数进行遍历。greeting=
'How'it=
iter(greeting)3print(next(it))print(next(it))print(next(it))print(next(it))#
'H'#
'o'#
'w'#触发 StopIteration
异常事实上
for-in
循环的底层每次也会调用
next()
机制。谭振宇第一章:Python
语言入门2026年05月
06日35/
55生成器
(Generator)使用了
yield
关键字的函数即为生成器。每次
yield
都会产生一个值并将函数暂停,省去大量内存占用。1 def
fibonacci(n):2 a,b,count=0,1,
0whilecount<
n:yield
aa,b=b,a+
bcount+=
178 forvalin
fibonacci(5):9 print(val)#0,1,1,2,
3谭振宇第一章:Python
语言入门2026年05月
06日36/
55异常处理处理程序运行中不可预见的错误,提高软件健壮性:try:#
尝试执行可能发生异常的代码3 y=2/
0exceptZeroDivisionErroras
e:#
发生异常时执行的代码print(f"Error:
{e}")else:#
未发生异常时执行print("No
errors.")finally:#
无论是否发生异常必将执行print("Always
executed.")谭振宇第一章:Python
语言入门2026年05月
06日37/
55Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结函数的定义与调用函数是最小的功能代码单元,可提高代码的复用率和可读性。defadd(x,
y=1):"""文档字符串:计算x与y之和"""returnx+
y45 add(10)6 add(10,
20)#使用默认值
y=1,返回
11#覆盖默认值,返回 30谭振宇第一章:Python
语言入门2026年05月
06日39/
55深入理解参数传递Python
的变量传递视对象是否可变而定:传递不可变对象(数字、元组):等同于值传递,函数内修改不影响原变量。传递可变对象(列表、字典):等同于引用传递,直接修改原数据。1 defmodify(a,
b):2 a+=
b34 x,y=1,
25 modify(x,
y)
#
a和b不可变,x=1
不发生改变67 lst1,lst2=[1],
[2]8 modify(lst1,lst2)#发生改变,此时 lst1=[1,
2]谭振宇第一章:Python
语言入门2026年05月
06日40/
55不定长参数与匿名函数不定长参数与匿名函数*args
会将额外位置参数组成元组。**kwargs
会将额外的关键字参数组成字典。Lambda
匿名函数lambda
参数:
表达式。多用于高阶函数的极简传参,无需定义完整函数。1 func=lambdax,y:x+
y2 func(1,2)#
返回 3谭振宇第一章:Python
语言入门2026年05月
06日41/
55模块与包的概念模块
(Module):一个
.py
文件,可定义函数、类和变量。包
(Package):包含多个模块的目录,内含 _init
_.py
文件,以支持分层导入。库
(Library):多个包的集合,提供了特定主题相关的功能。import
osfrompathlibimport
Path3#
使用模块中的方法os.path.isdir('.')谭振宇第一章:Python
语言入门2026年05月
06日42/
55Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结跨平台文件路径
(Pathlib)做空间数据批处理必不可少的路径操作对象:pathlib.Path。1 frompathlibimport
Path2p=Path()/
'example.txt'p.exists()p.is_file()p.resolve()p.parentp.stem#
利用斜杠进行路径拼接#
判断是否存在#
判断是否为文件#
解析为绝对路径#
获取直系父目录#
获取带后缀的文件全名#
获取文件主名(不含后缀)谭振宇第一章:Python
语言入门2026年05月
06日44/
55路径的常用操作
(shutil)结合内置
shutil
模块进行复杂文件或目录的移动操作:import
shutilfrompathlibimport
Path3d=
Path('Music')d.mkdir()
#
创建目录6shutil.copy('src.txt',
'dst.txt')shutil.move('old.txt',
'new.txt')shutil.copytree('src_dir',
'dst_dir')shutil.rmtree('dst_dir')Path('file.txt').unlink()#
文件复制#
文件移动或重命名#
文件夹完全复制#
文件夹整个移除#
使用Path对象进行文件删除谭振宇第一章:Python
语言入门2026年05月
06日45/
55读取文本文件通常采用
with
open()
使得文件在读写结束后自动安全关闭。with
open('青花瓷.txt',
mode='r',
encoding='utf-8')
as
f:forlinein
f.readlines():print(line.strip())4#mode
表:#
'r'
只读(默认)#
'b'
二进制模式'w'覆盖写入 'a'
追加写入't'
文本模式(默认)谭振宇第一章:Python
语言入门2026年05月
06日46/
55读取二进制与文件批处理底层处理空间数据时(如
Shapefile),往往需要通过
struct
解析二进制文件:import
structwithopen('data.shp','rb')as
f:header=
f.read(100)#
按特定数据格式大端无符号整型解包file_code=struct.unpack(">i",
header[:4])[0]数据批处理示例:#递归找到所有 .py
结尾文件forfin
Path('.').glob('**/*.py'):print(f)谭振宇第一章:Python
语言入门2026年05月
06日47/
55Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结面向对象:类和对象面向对象编程把对象作为程序的基本单元。类是一组相关数据(属性)和操作函数的封装(方法)。def _init_(self,w,
h):self.width=wself.height=
hdef
area(self):returnself.width*
self.height1 class
Rectangle(object):2345678rect=Rectangle(10,
20)print(rect.area())谭振宇第一章:Python
语言入门2026年05月
06日49/
55继承与多态子类可以继承父类复用代码,并能重写(Overwrite)父类的方法,形成多态行为。class
Shape(object):def
area(self):pass4class
Circle(Shape):def _init_(self,
r):self.r=
rdef
area(self):return3.14*self.r**
210class
Rectangle(Shape):def _init_(self,w,
h):self.w,self.h=w,
h谭振宇第一章:Python
语言入门2026年05月
06日50/
55继承与多态def
area(self):returnself.w*
self.h141516#
多态:同一接口调用,产生不同的行为shapes=[Circle(5),Rectangle(3,
4)]forsin
shapes:#不需关心 s的具体类型,只需调用 area
即可print(f"{type(s).
_name
_}
面积为:
{s.area()}")谭振宇第一章:Python
语言入门2026年05月
06日51/
55函数式编程关注处理的结果,基于纯函数与数据的流式组装映射。 核心函数:map(),reduce(),
filter()。1 #
map:
对数据序列作一对一映射2 ls=list(map(lambdax:x*2,[1,2,3]))#
返回 [2,4,6]3#
filter:
条件过滤序列数据ls=list(filter(lambdax:x>1,[1,2,3]))#
返回 [2,3]6#
reduce:
累积归并输出单一值fromfunctoolsimport
reduceres=reduce(lambdax,y:x+y,[1,2,3])#
返回 6谭振宇第一章:Python
语言入门2026年05月
06日52/
55Python
语言闲话基本数据类型及运算符字符串及输入输出序列与字典流程控制函数与模块文件操作面向对象编程与函数式编程本章小结本章知识要点回顾核心内容数据类型与运算:深入掌握字符串、列表、字典等容器。流程控制:熟练使用分支、循环及异常处理构建程序逻辑。函数与模块:理解参数传递,提高代码模块化复用。文件与批处理:灵活运用
pathlib
针对数据做批次处理。编程思想:领会面向对象与函数式编程在开发中的优势。谭振宇第一章:Python
语言入门2026年05月
06日54/
55随堂练习制作一个简易的计算器,能够实现常见的数学运算。在不依赖任何第三方库的情况下,制作一个简易的日历。用户通过输入年份和月份,可以打印出该月份的日历表。自定义一个类
Matrix,并实现矩阵的加法和乘法运算。谭振宇第一章:Python
语言入门2026年05月
06日55/
55第二章:Python 科学计算多维数组(NumPy)二维表(Pandas)Matplotlib
绘图库SciPy
科学计算Scikit-learn
机器学习Scikit-image
图像处理本章小结为什么要学习
NumPy?NumPy
是
Python
科学计算的基石,几乎所有科学计算库都构建在它之上。核心价值科学观测数据大多可抽象为多维数组提供高效的向量化运算,
远快于纯PythonPandas、SciPy、Matplotlib
均构建于其上安装方法1 condainstall-cconda-forge
numpy导入惯例:1 importnumpyas
npNumPy
的核心是多维数组
ndarray。整个
Python
科学计算体系都是建立在
ndarray
之上的。谭振宇第二章:Python
科学计算2026年05月
06日2/
44ndarray
核心概念ndarray
是
NumPy
中的多维数组对象,有三个重要属性:ndim维度数:数组的轴数(维数)。shape形状:一个元组,表示每个维度中的元素数目。dtype数据类型:数组元素的底层存储类型,如int64、float32。核心概念:维度的理解把多维数组看成一维数组的嵌套:第一个维度:最外层的元素最后一个维度:最内层的元素例如
shape=(2,3,4)
的数组:最外层有
2
块,每块有
3
行,每行有
4
个元素。谭振宇第二章:Python
科学计算2026年05月
06日3/
44ndarray
核心概念思考一下我们地理信息领域有哪些数据可以表示为多维数组?谭振宇第二章:Python
科学计算2026年05月
06日4/
44数组维度理解维度理解对于掌握数组索引、切片、合并等操作至关重要谭振宇第二章:Python
科学计算2026年05月
06日5/
44创建多维数组方法一:从列表创建1 importnumpyas
np2 nums=np.array([[1,2,3],[4,5,
6]])print(nums.dtype)print(nums.shape)print(nums.ndim)#
int64#(2,
3)#
2方法二:创建空数组并赋值nines=np.empty((3,3),
64)nines[:]=9 #
所有元素赋值为
9方法三:使用
range
生成并
reshapenums=np.reshape(range(16),(4,
4))#
转置nums=np.transpose(nums) #
等价于
nums.T#
再次
reshape
成三维nums3d=np.reshape(nums,(4,2,
2))谭振宇第二章:Python
科学计算2026年05月
06日6/
44数组索引与切片通过
start:stop:step
语法对每个维度进行切片:8] [910
11]][3
4
5]
[6
7#
第一行:[0
1
2]#
第二列:[1 4 7
10]#
第一行第二列:1#
最后一行倒数第二列:101 nums=np.arange(12).reshape(4,
3)2 #[[0 1 2]34 nums[0]5 nums[:,
1]6 nums[0,
1]7 nums[-1,
-2]8 nums[[0,
2],
:]
#
取出第一和第三行三维数组切片1 nums=np.arange(18).reshape(3,3,
2)2 nums[1:,:,
0]3 nums[0,:2,
-1]4 nums[:2, .]#
第一维第2个起,第三维取第1个#
第一维第1个,第二维前2个,第三维最后1个#
省略号代替后续所有维度谭振宇第二章:Python
科学计算2026年05月
06日7/
44数组的基本操作算术运算(逐元素)线性代数1x+
y#
逐元素相加1x.dot(y)#向量内积2x*
y#
逐元素相乘2np.matmul(x,
y)#矩阵乘法3x+
2#
广播:每个元素加23np.linalg.det(x)#行列式4x**
2#
逐元素平方4np.linalg.inv(x)#矩阵逆5x.T#转置元素筛选排序1np.where(nums>
5)#
返回满足条件的索引1np.sort(nums,
axis=0)#沿第一维排序2np.extract(nums>
5,nums)
#
返回满足条件的元素2np.argsort(nums)#返回排序后的索引3nums[nums>5]=
5#
条件赋值3nums.max(0)#第一维的最大值4np.argmax(nums,
0)#最大值的索引谭振宇第二章:Python
科学计算2026年05月
06日8/
44数组的合并与分割vstack
/
hstack:直观拼接np.vstack((x,
y)) #
沿行方向(垂直)合并np.hstack((x,
y)) #
沿列方向(水平)合并stack:新增维度合并#
10
个
3×4
的数组,沿不同维度
stacknp.stack(data,
axis=0).shapenp.stack(data,
axis=1).shapenp.stack(data,
axis=2).shape#(10,3,
4)#(3,10,
4)#(3,4,
10)concatenate:在已有维度合并(维度不变)np.concatenate(data,
axis=0).shape #(30,
4)np.concatenate(data,
axis=1).shape #(3,
40)#
axis=0
等价于
vstack;axis=1
等价于
hstackstack
合并后会新增一个维度;concatenate
合并后维度数不变。谭振宇第二章:Python
科学计算2026年05月
06日9/
44增减维度:newaxis
与
squeeze在处理遥感影像等数据时,经常需要动态增减数组维度:.]#(1,1,3,
4)1 data=
np.random.random((3,
4)) #shape:(3,
4)2#
新增一个维度(推荐这种写法,表意清晰)data
=
data[np.newaxis, .]print(data.shape) #(1,3,
4)6#
再新增一个维度(等价写法)data=
data[None,print(data.shape)10#
去除大小为
1
的多余维度data=
np.squeeze(data)print(data.shape) #(3,
4)谭振宇第二章:Python
科学计算2026年05月
06日10/
44向量化编程1 #
10000×10000
数组,约需
1
分钟foriin
range(count):forjin
range(count):4 v[i][j]=v[i][j]**2+
3.14关键原则:处理
NumPy
数组时,尽量避免
for
循环,使用向量化编程可大幅提升效率。❌
使用
for
循环(慢) ✅
向量化编程(快)#
同样的操作,约需
1.3
秒vector=vector**2+
3.14沿指定维度进行向量化操作#
在第二维找最大值(apply_along_axis)np.apply_along_axis(np.max,1,
data)#
在第一维和第三维求和(apply_over_axes)np.apply_over_axes(np.sum,data,(0,
2))谭振宇第二章:Python
科学计算2026年05月
06日11/
44MaskedArray:处理无效数据在遥感影像处理中,常用
MaskedArray
屏蔽云污染、无效像素等:1 fromnumpyimport
ma23 data=np.random.randn(3,
4)4#
将小于
0
的元素掩膜掉(输出中显示为 -)x=ma.MaskedArray(data,mask=(data<
0))7#
将大于
1
的元素掩膜掉y=ma.MaskedArray(data,mask=(data>
1))10#
掩膜位置会在运算结果中自动传播print(x
+
y) #
任意一方被掩膜的位置,结果也被掩膜若参与运算的任意数组中某位置的元素为无效值(掩膜),则运算结果中该位置的元素也将自动变为无效值。谭振宇第二章:Python
科学计算2026年05月
06日12/
44NumPy
核心知识小结本节要点ndarray
的三个关键属性:ndim(维数)、shape(形状)、dtype(数据类型)维度理解:第一个维度为最外层,最后一个维度为最内层索引和切片:start:stop:step,多维用逗号分隔,省略号代替连续维度合并:concatenate(维度不变)vsstack(新增一维)向量化编程:避免循环,效率提升数十倍MaskedArray:处理无效数据,掩膜自动传播谭振宇第二章:Python
科学计算2026年05月
06日13/
44多维数组(NumPy)二维表(Pandas)Matplotlib
绘图库SciPy
科学计算Scikit-learn
机器学习Scikit-image
图像处理本章小结Pandas
简介DataFrame:二维表格,类似
Excel
或SQL
表,每列可以是不同类型Series:一维数组,类似表格中的一列Pandas
是
Python
中最常用的数据处理与分析库,广泛应用于数据科学和机器学习领域。核心数据结构 核心功能读写
CSV、Excel、SQL、JSON
等多种文件格式数据过滤、分组、聚合、合并、连接数据清洗:去重、填补缺失值1 condainstall-cconda-forge
pandas1 importpandasas
pd谭振宇第二章:Python
科学计算2026年05月
06日15/
44DataFrame
创建从列表(二维数组)创建1 data=[[1,2,
3],2 [4,5,
6],3 [7,8,
9]]4 df=
pd.DataFrame(data,5 index=[1,2,
3],6 columns=['a','b','c'])从字典创建1 data=
{2 'a':[4,5,
6],3 'b':[7,8,
9],4 'c':[10,11,
12]5 }6 df=
pd.DataFrame(data,7 index=[1,2,
3])从文件读取df
=
pd.read_csv('iris.csv') #读取
CSVdf=pd.read_excel('data.xlsx')#读取
Exceldf.head(5)df.tail(5)df.shape#
查看前
5
行#
查看后
5
行#
输出行数和列数谭振宇第二章:Python
科学计算2026年05月
06日16/
44DataFrame
访问:列与行条件Pandas
提供多种方式灵活访问数据:1#
按列名选择单列(返回
Series)2data=
df['petallength']3#df['petallength']与df.petallength
等价45#
按列名选择多列(返回
DataFrame)6data=df[['petallength',
'petalwidth']]78#
按行条件筛选(萼片宽度
>
3.5
的所有行)9data=df[df.sepalwidth>
3.5]1011#
多条件组合筛选(&
表示且,|
表示或)12data=df[(df.sepalwidth>4)&
(df.petalwidth<
0.5)]选择单列时,返回类型为
Series;选择多列或按条件筛选时,返回类型为DataFrame。谭振宇第二章:Python
科学计算2026年05月
06日17/
44DataFrame
访问:iloc
与
lociloc:基于整数位置(行列号)loc:基于标签(列名)1#
选择第
10
到
15
行1#
按列名选择指定列2df.iloc[10:16]2df.loc[:,['sepalwidth',
'petalwidth']]334#
选择第
2、3
列的所有行4#
条件筛选行
+
指定列5df.iloc[:,[1,
2]]5df.loc[df.sepalwidth>
3.5,66['sepalwidth',
'class']]7#
访问具体某个元素(行号,列号)78df.iat[4,
-1]8#
访问具体某个元素(行号,列名)9df.at[4,
'class']谭振宇第二章:Python
科学计算2026年05月
06日18/
44DataFrame
合并:concat按行拼接(axis=0,默认)#
两表结构相同,行合并(行数之和)df=pd.concat([df1,
df2])按列拼接(axis=1)#
两表行数相同,列合并(列数之和)df=pd.concat([df1,df2],
axis=1)增加单行或单列#
通过
loc
给
DataFrame
增加一行df.loc[len(df.index)]=[43,'M','Jay',
'NW']3#
直接通过
[]
给
DataFrame
添加新列df['ID']=df.Age*random.randint(0,
100)谭振宇第二章:Python
科学计算2026年05月
06日19/
44DataFrame
合并:merge保留两表公共元素,类似集合求交集。merge()
实现类似
SQL
的表连接功能,通过
how
参数指定连接类型:内连接(inner,默认) 外连接(outer)保留所有元素,类似集合求并集,缺失值填
NaN。左连接(left)完全保留左表的所有行,右表无匹配则填NaN。右连接(right)完全保留右表的所有行,左表无匹配则填NaN。#
on
参数指定两表中共有的基准列pd.merge(df1,df2,how='inner',
on='x1')pd.merge(df1,df2,how='left', on='x1')pd.merge(df1,df2,how='outer',
on='x1')#
内连接#
左连接#
外连接谭振宇第二章:Python
科学计算2026年05月
06日20/
44Pandas
常用工具函数数据清洗宽表
↔
长表转换1df.drop_duplicates()#去重(按行)1#
宽表
→
长表(列名变为行数据)2df.dropna()#去除含空值2pd.melt(df,
id_vars=['ID'],的行3value_vars=['Name',3df.fillna(0)#将空值填充'Role'])为
045#
长表
→
宽表(行数据变为列名)6df.pivot(index='ID',7columns='variable',8values='value')在使用基于
Grammar
of
Graphics
语法的绘图库(如
plotnine)时,通常需要将数据整理为“长表格”格式。melt()
和pivot()
函数正是为此场景设计的。谭振宇第二章:Python
科学计算2026年05月
06日21/
44Pandas
核心知识小结本节要点DataFrame
=二维表格;Series
=一维序列创建:从
list、dict
或读取
CSV/Excel
文件访问:[](按列名/条件)、iloc(按位置)、loc(按标签)合并:concat(直接按行列拼接)vs
merge(SQL
风格的连接)清洗:drop_duplicates、dropna、fillna变形:melt(宽→长)、pivot(长→宽)谭振宇第二章:Python
科学计算2026年05月
06日22/
44多维数组(NumPy)二维表(Pandas)Matplotlib
绘图库SciPy
科学计算Scikit-learn
机器学习Scikit-image
图像处理本章小结Matplotlib
简介Matplotlib
是
Python
最经典的二维科学绘图库,可绘制折线图、散点图、柱状图、热力图等。核心对象层次Figure:整个图形画布Axes:子图(一个
Figure
可含多个)Axis:坐标轴(X
轴、Y
轴)Title:图标题两种编程接口pyplot
接口(state-based):类似MATLAB,简洁快捷,适合交互探索面向对象接口:更精细的控制,适合复杂绘图场景1 condainstall-cconda-forge
matplotlib谭振宇第二章:Python
科学计算2026年05月
06日24/
44Matplotlib
核心概念01234这是
Y轴标题轴A
x
i
s
次刻度标注Ti
c
k
s轴主刻度轴次刻度M
i
n
o
r
t
i
c
k轴主刻度M
a
j
o
r
t
i
c
k00.250.500.7511.251.501.7522.252.502.7533.253.50
3.754这是
轴的标题轴A
x
i
s
标题L
a
b
e
l轴A
x
is
标题La
be
l标题Ti
t
l
e曲线Line曲线Line散点图格网线Grid子图Axes整图F
i
g
u
r
e图外框S
p
i
n
eFigure包含的元素解剖蓝色信号红色信号图例L
e
g
e
n
d一个
Figure
中包含的所有可视化元素多个子图构成一个
Figure谭振宇第二章:Python
科学计算2026年05月
06日25/
44pyplot
接口绘图使用
pyplot
接口快速绘制折线图:1importmatplotlib.pyplot
asplt2importnumpyas
np34x=np.arange(0,2*
np.pi,0.1)5y=
np.sin(x)67plt.plot(x,
y)#
绘制折线图8plt.title('正弦函数')#
设置图名9plt.xlabel('X
轴')#
X
轴标签10plt.ylabel('Y
轴')#
Y
轴标签11plt.grid(True)#
显示网格12plt.show()#
展示图像推荐风格:混合使用
pyplot
和面向对象接口——用
plt.subplot()
创建
Axes,再通过ax
对象进行精细控制。谭振宇第二章:Python
科学计算2026年05月
06日26/
44面向对象接口与多子图import
matplotlibimportmatplotlib.pyplotas
pltimportnumpyas
np45 matplotlib.rc("font",family='OPPOSans') #
设置中文字体67 x=np.arange(-5,5,
0.1)y=np.sin(x)+np.random.rand(x.size)*
0.1data=np.random.rand(10,
10)1011 fig,axs=plt.subplots(1,2,figsize=(12,
6))12#
左图:散点图axs[0].scatter(x,y,c='blue',
marker='o')axs[0].set_title('散点图')axs[0].set_xlabel('X轴')17#
右图:热力图cax=axs[1].imshow(data,
cmap='viridis')fig.colorbar(cax,
ax=axs[1])axs[1].set_title('热力图')22plt.tight_layout()plt.savefig('subplots.pdf',
dpi=300)plt.show()谭振宇第二章:Python
科学计算2026年05月
06日27/
44使用
Basemap
绘制地图Basemap
是
Matplotlib
的地图绘制扩展,提供地图投影和基础地理数据:#
绘制海岸线#
绘制国界线#
海洋填色#
陆地填色importmatplotlib.pyplotas
pltfrommpl_toolkits.basemapimport
Basemap3#
创建正射投影地图,resolution='i'
为中分辨率m=Basemap(projection='ortho',lon_0=0,
lat_0=0,resolution='i')7m.drawcoastlines()m.drawcountries()m.drawmapboundary
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年护理课件制作价格
- 2026年劳动合同改劳务派遣合同(1篇)
- 2026年口腔镶牙合同(1篇)
- 糖尿病心理护理与情绪管理
- 炎性肠病的饮食调理与营养支持
- 洋地黄治疗过程中的剂量调整
- 2026年夜总会收银系统更新合同协议
- 精神科患者康复护理
- 2026年借款合同跟抵押合同(1篇)
- 用图象表示变量之间的关系课件2025-2026学年北师大版七年级数学下册
- 厨房劳务承揽合同范本
- 上海会展展览行业劳动合同模板
- 下基层调研工作制度
- JJG 621-2012 液压千斤顶行业标准
- T-GDWCA 0035-2018 HDMI 连接线标准规范
- 小升初语文文言文阅读历年真题50题(含答案解析)
- 头晕教学讲解课件
- 电气化铁路有关人员电气安全规则2023年新版
- GB/T 23853-2022卤水碳酸锂
- GB/T 16823.3-2010紧固件扭矩-夹紧力试验
- FZ/T 74001-2020纺织品针织运动护具
评论
0/150
提交评论