Python空间数据处理 课件全套 第1-9章:Python 语言入门- 遥感影像处理与应用_第1页
Python空间数据处理 课件全套 第1-9章:Python 语言入门- 遥感影像处理与应用_第2页
Python空间数据处理 课件全套 第1-9章:Python 语言入门- 遥感影像处理与应用_第3页
Python空间数据处理 课件全套 第1-9章:Python 语言入门- 遥感影像处理与应用_第4页
Python空间数据处理 课件全套 第1-9章:Python 语言入门- 遥感影像处理与应用_第5页
已阅读5页,还剩357页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章: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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论