02基于pytorch的深度学习遥感地物分类全流程实战教程(包含遥感深度学习数据集制作与大图预测)-实践篇-python基础与遥感深度学习境配置

目录

[第二篇 实践篇](#第二篇 实践篇)

[1 python基础与遥感深度学习境配置](#1 python基础与遥感深度学习境配置)

1.1初识Python

1.1.1Python安装与环境配置

[1.1.1.1 anconda安装](#1.1.1.1 anconda安装)

[1.1.1.2 pycharm安装](#1.1.1.2 pycharm安装)

[1.1.1.3 Python环境配置](#1.1.1.3 Python环境配置)

1.1.2第一个python程序

1.2Python基础

1.2.1数据类型与变量

1.2.1.1整数 (int)

1.2.1.2浮点数 (float)

1.2.1.3字符串 (str)

1.2.1.4布尔值 (bool)

1.2.1.5列表 (list)

1.2.1.6元组 (tuple)

1.2.1.7集合(set))

1.2.1.8字典 (dict)

1.2.2运算符与表达式

1.2.3选择结构与条件判断

1.2.4循环结构与循环体

1.2.5数据的输入和输出

1.2.6文件读写

1.2.7函数

1.2.8类

1.3Python遥感深度学习境配置


第二篇 实践篇

1 python基础与遥感深度学习境配置

这一小节将对Python语言的一些基础进行介绍,Python比较的熟悉的同学可以跳过。

1.1初识Python

1.1.1Python安装与环境配置

python的安装主要分为python独立安装和anconda附带安装两种,我个人比较推荐anconda附带安装,因为anconda提供了强大的第三方包的管理能力,配合pycharm写代码爽歪歪。

接下来我以anconda安装以及pycharm配置为例。

1.1.1.1 anconda安装

1、下载安装包

推荐使用通过清华镜像源下载,下载速度较快,链接如下,可根据date选择最新版本

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D

2、安装anconda

推荐使用管理员权限运行安装,避免不必要的麻烦

点击Next

I agree 同意

两个选择,我在使用时影响不大,可选择默认选项all users,点击next

选择安装路径,如果C盘空间充足建议默认路径,next

默认选项即可,install,然后稍定几分钟。。。。

next,next然后完成了安装!!!

1.1.1.2 pycharm安装

1.下载安装包https://www.jetbrains.com/pycharm/download/?section=windows 下载社区版就基本够用

2.安装pycharm

找到你下载PyCharm的路径,双击.exe文件进行安装。

点击 Next 后,我们进行选择安装路径页面(尽量不要选择带中文和空格的目录)选择好路径后,点击 Next 进行下一步

进入 Installation Options(安装选项)页面,全部勾选上。点击 Next

进入 Choose Start Menu Folder 页面,直接点击 Install 进行安装

5.等待安装完成后出现下图界面,我们点击 Finish 完成。

3.汉化

File->Settings->Plugins(插件)在搜索栏中输入Chinese(Simplified)下载中文插件并安装重启PyCharm即出现汉化

1.1.1.3 Python环境配置

1.anconda环境配置

打开anconda,点击environment

新安装后的anconda只有一个base环境,如果新建环境点击create

给环境起一个名称,选择python的版本 ,填写好后点击create 稍定几分钟就创建好了

2、在虚拟环境中安装第三方库(界面化操作)

把左上方下拉框选为 not installed 在右上方搜索,如gdal、Scikit learn、numpy。pytorch等

然后勾选需要的库

点击apply 进行安装

3、虚拟环境的使用(pycharm内使用)

打开pycharm

新建项目,使用先前配置的解释器

使用conda环境,确定,就可使用。

1.1.2第一个python程序

1 新建python项目

文件->新建项目->新建一个文件夹"python-learn"->选择该文件夹->选择一个python环境->创建

新建之后,pycharm自动生产了一个简易模版

2 编写"Holle world"

在模版的基础上修改一下,删除一些注释

复制代码
def print_hi(name):
    print(f'Hi, {name}')  


if __name__ == '__main__':
    print_hi('Holle world')

3 运行python代码

右键点击"运行'main'",下方就会打印出Hi,Holle world的文本

1.2Python基础

1.2.1数据类型与变量

1 什么是数据类型

在计算机编程中,数据类型是指变量或表达式可以存储或处理的数据的种类。它定义了数据的特性、可操作性以及可能的值范围。常见的数据类型包括整数、浮点数、字符、字符串、布尔值等。

下面是Python中常见的数据类型及其常用方法:

  1. 整数 (int):常用方法包括:abs()(返回绝对值)、bin()(将整数转换为二进制字符串)、hex()(将整数转换为十六进制字符串)、int()(将字符串或浮点数转换为整数)等。
  2. 浮点数 (float):常用方法包括:abs()(返回绝对值)、round()(四舍五入取整)、is_integer()(判断是否为整数)等。
  3. 字符串 (str):常用方法包括:len()(返回字符串长度)、upper()(将字符串转换为大写)、lower()(将字符串转换为小写)、split()(将字符串拆分为列表)等。
  4. 列表 (list):常用方法包括:append()(将元素追加到列表末尾)、pop()(删除并返回列表中的最后一个元素)、insert()(在指定位置插入元素)、sort()(对列表进行排序)等。
  5. 元组 (tuple):元组是不可变的,因此没有修改元素的特定方法。可以使用索引访问元素,也可以使用len()获取元组的长度。
  6. 字典 (dict):常用方法包括:keys()(返回字典中的所有键)、values()(返回字典中的所有值)、get()(根据键获取值,可以设置默认值)等。
  7. 集合 (set):常用方法包括:add()(向集合中添加元素)、remove()(删除集合中的元素)、union()(返回两个集合的并集)、intersection()(返回两个集合的交集)等。
  8. 布尔值 (bool):布尔值主要用于逻辑判断,常用于条件语句中。

此外,各个数据类型还有更多的内置方法和功能,可以根据具体需求查阅官方文档以获取详细信息。

2 什么是变量

在计算机编程中,变量是用于存储和表示数据的一种命名标识符。它可以将一个值或数据对象赋值给一个变量,以便在程序中进行处理、操作和引用。

在 Python 中,定义变量时不需要事先声明变量的类型,可以直接给变量赋值,解释器会根据赋的值自动推断变量的类型。变量名可以包含字母、数字和下划线,但不能以数字开头。

以下是一些关于变量的基本知识:

  1. 变量赋值:使用等号(=)将值赋给变量。例如:x = 5,将数字 5 赋给变量 x。
  2. 变量命名规则:变量名只能包含字母、数字和下划线,但不能以数字开头。变量名区分大小写,例如,myVarmyvar 是不同的变量名。
  3. 变量类型:变量的类型由赋给它的值决定。变量可以随时更改其值和类型。
  4. 变量引用:变量本质上是一个指向存储值的内存地址的名称。多个变量可以引用相同的值。
  5. 动态类型:Python 是一种动态类型语言,允许在运行时更改变量的类型。
  6. 变量命名习惯:为了提高代码的可读性,建议使用具有描述性的变量名,使其易于理解变量的用途。

以下是一些使用变量的示例:

复制代码
x = 10  # 将整数值 10 赋给变量 x
y = "Hello"  # 将字符串值 "Hello" 赋给变量 y
z = [1, 2, 3]  # 将列表 [1, 2, 3] 赋给变量 z

# 变量之间的运算和操作
a = x + 5  # x 和 5 相加,结果赋给变量 a
b = y + " World"  # 字符串拼接,结果赋给变量 b
z.append(4)  # 在列表 z 中添加一个元素 4

print(a)  # 输出变量 a 的值
print(b)  # 输出变量 b 的值
print(z)  # 输出变量 z 的值

通过使用变量,可以在程序中存储和操作数据,使代码更加灵活和可读。

1.2.1.1整数 (int)

以下是一些常用的整型方法和示例:

  1. int():将其他数据类型转换为整型。

    num1 = int(3.5)

    num1 的值为 3

  2. +-*/:整型之间的基本算术运算。

    num2 = 5 + 2

    num2 的值为 7

    num3 = 9 - 4

    num3 的值为 5

    num4 = 3 * 4

    num4 的值为 12

    num5 = 10 / 2

    num5 的值为 5.0

  3. %:取模运算,返回两个数相除的余数。

    num6 = 10 % 3

    num6 的值为 1

  4. //:整数除法,返回两个数相除后的整数部分。

    num7 = 10 // 3

    num7 的值为 3

  5. **:幂运算,返回一个数的指数幂。

    num8 = 2 ** 3

    num8 的值为 8

  6. abs():返回一个数的绝对值。

    num9 = abs(-5)

    num9 的值为 5

1.2.1.2浮点数 (float)

以下是一些常用的浮点型方法和示例:

  1. float():将其他数据类型转换为浮点型。

    num1 = float(3)

    num1 的值为 3.0

  2. +-*/:浮点型之间的基本算术运算。

    num2 = 3.5 + 2.1

    num2 的值为 5.6

    num3 = 8.9 - 4.3

    num3 的值为 4.6

    num4 = 2.5 * 4

    num4 的值为 10.0

    num5 = 9.0 / 2

    num5 的值为 4.5

  3. math.floor():返回一个浮点数的向下取整值。

    import math

    num6 = math.floor(3.7)

    num6 的值为 3

  4. math.ceil():返回一个浮点数的向上取整值。

    import math

    num7 = math.ceil(3.2)

    num7 的值为 4

  5. round():返回一个浮点数的四舍五入值。

    num8 = round(2.9)

    num8 的值为 3

    num9 = round(3.1)

    num9 的值为 3

  6. math.sqrt():返回一个浮点数的平方根值。

    import math

    num10 = math.sqrt(9)

    num10 的值为 3.0

1.2.1.3字符串 (str)

以下是一些常用的字符串方法和示例:

  1. len():返回一个字符串的长度(即字符数)。

    length 的值为 12

  2. +:字符串拼接。

    str2 = 'Hello' + ' ' + 'World!'

    str2 的值为 'Hello World!'

  3. *:字符串复制。

    str3 = 'Hello' * 3

    str3 的值为 'HelloHelloHello'

  4. str.upper():将字符串中的所有字符转换为大写字母。

    str4 = 'hello world!'
    upper_str = str4.upper()

    upper_str 的值为 'HELLO WORLD!'

  5. str.lower():将字符串中的所有字符转换为小写字母。

    str5 = 'HELLO WORLD!'
    lower_str = str5.lower()

    lower_str 的值为 'hello world!'

  6. str.capitalize():将字符串的第一个字符转换为大写字母,其他字符转换为小写字母。

    str6 = 'hello world!'
    cap_str = str6.capitalize()

    cap_str 的值为 'Hello world!'

  7. str.count():返回一个字符串中某个子串出现的次数。

    str7 = 'Hello World!'
    count = str7.count('l')

    count 的值为 3

  8. str.replace():替换字符串中的某个子串。

    str8 = 'hello world!'
    new_str = str8.replace('world', 'python')

    new_str 的值为 'hello python!'

  9. str.split():将字符串按照指定分隔符拆分成列表。

    str9 = 'hello,world,python'
    split_str = str9.split(',')

    split_str 的值为 ['hello', 'world', 'python']

1.2.1.4布尔值 (bool)

尔值数据类型表示逻辑上的真(True)或假(False)。以下是一些常用的布尔值方法和示例:

  1. TrueFalse:布尔字面值,分别代表真和假。

    bool1 = True
    bool2 = False

  2. ==!=><>=<=:比较运算符,用于比较两个值之间的关系,返回布尔值。

    num1 = 10
    num2 = 5

    bool3 = num1 == num2

    bool3 的值为 False

    bool4 = num1 > num2

    bool4 的值为 True

  3. andornot:逻辑运算符,用于组合多个布尔表达式,返回布尔值。

    bool5 = True and False

    bool5 的值为 False

    bool6 = True or False

    bool6 的值为 True

    bool7 = not True

    bool7 的值为 False

  4. bool():将其他数据类型转换为布尔值。

    bool8 = bool(0)

    bool8 的值为 False

    bool9 = bool(10)

    bool9 的值为 True

布尔值常用于条件语句和逻辑判断中,用于控制程序的执行流程。

1.2.1.5列表 (list)

列表数据 list,可以存储多个值,支持添加、删除、修改等操作。以下是一些常用的列表方法和示例:

  1. []:列表字面值,用方括号括起来表示一个列表,元素之间用逗号隔开。

    list1 = [1, 2, 3, 'hello', True]

  2. len():返回一个列表的长度(即元素个数)。

    list2 = [1, 2, 3, 4, 5]
    length = len(list2)

    length 的值为 5

  3. +:列表拼接,将两个列表合并成一个新的列表。

    list3 = [1, 2, 3]
    list4 = [4, 5, 6]
    new_list = list3 + list4

    new_list 的值为 [1, 2, 3, 4, 5, 6]

  4. *:列表复制,将列表中的元素重复多次。

    list5 = [1, 2, 3]
    new_list = list5 * 3

    new_list 的值为 [1, 2, 3, 1, 2, 3, 1, 2, 3]

  5. append():在列表的末尾添加新的元素。

    list6 = [1, 2, 3]
    list6.append(4)

    list6 的值为 [1, 2, 3, 4]

  6. extend():在列表的末尾添加多个元素,相当于将一个列表合并到另一个列表的末尾。

    list7 = [1, 2, 3]
    list7.extend([4, 5, 6])

    list7 的值为 [1, 2, 3, 4, 5, 6]

  7. insert():在列表的指定位置插入一个新的元素。

    list8 = [1, 2, 3]
    list8.insert(1, 'hello')

    list8 的值为 [1, 'hello', 2, 3]

  8. remove():从列表中删除第一个匹配的元素。

    list9 = [1, 2, 3, 4, 5]
    list9.remove(3)

    list9 的值为 [1, 2, 4, 5]

  9. pop():从列表中删除并返回指定位置的元素。

    list10 = [1, 2, 3, 4, 5]
    popped = list10.pop(2)

    popped 的值为 3,list10 的值为 [1, 2, 4, 5]

  10. index():返回列表中第一个匹配元素的索引值。

    list11 = [1, 2, 3, 4, 5]
    index = list11.index(3)

    index 的值为 2

  11. count():返回列表中指定元素的出现次数。

    list12 = [1, 2, 3, 4, 3, 5, 3]
    count = list12.count(3)

    count 的值为 3

  12. sort():对列表中的元素进行排序,默认为升序排序。

    list13 = [2, 5, 1, 3, 4]
    list13.sort()

    list13 的值为 [1, 2, 3, 4, 5]

  13. reverse():将列表中的元素反转。

    list14 = [1, 2, 3, 4, 5]
    list14.reverse()

    list14 的值为 [5, 4, 3, 2, 1]

  14. copy():复制一个列表,返回一个新的列表。

    list15 = [1, 2, 3]
    new_list = list15.copy()

    new_list 的值为 [1, 2, 3]

  15. clear():清空列表中的所有元素。

    list16 = [1, 2, 3]
    list16.clear()

    list16 的值为 []

  16. slice:通过切片操作截取列表的一部分。

    list17 = [1, 2, 3, 4, 5]
    sub_list = list17[1:4]

    sub_list 的值为 [2, 3, 4]

  17. innot in:判断一个元素是否存在于列表中。

    list18 = [1, 2, 3, 4, 5]
    result1 = 3 in list18
    result2 = 6 not in list18

    result1 的值为 True,result2 的值为 True

  18. max()min():返回列表中的最大值和最小值。

    list19 = [1, 2, 3, 4, 5]
    max_value = max(list19)
    min_value = min(list19)

    max_value 的值为 5,min_value 的值为 1

  19. sum():计算列表中所有元素的总和。

    list20 = [1, 2, 3, 4, 5]
    total = sum(list20)

    total 的值为 15

  20. 列表的索引和切片操作:使用索引和切片操作可以获取列表中的元素或子列表,也可以修改列表中的元素。

    list21 = [1, 2, 3, 4, 5]
    element_0 = list21[0]
    sub_list = list21[1:4]
    list21[2] = 6

    element_0 的值为 1,sub_list 的值为 [2, 3, 4],list21 的值为 [1, 2, 6, 4, 5]

1.2.1.6元组 (tuple)

元组是一个有序、不可变的数据类型,用于存储多个元素。它使用圆括号 ()tuple() 构造。与列表类似,元组可以包含不同类型的元素,并且可以嵌套其他元组。

元组的特点是一旦创建后,其元素和长度都不能修改。这使得元组具有不可变性,适合用于表示不会改变的数据集,如一组坐标、数据库记录等。

以下是元组常用的方法和操作:

  1. len():返回元组中的元素数量。

    tuple1 = (1, 2, 3)
    length = len(tuple1)

    length 的值为 3

  2. 索引和切片:使用索引访问元组中的元素,或使用切片操作访问子元组。

    tuple2 = ("apple", "banana", "cherry")
    element = tuple2[0]
    sub_tuple = tuple2[1:3]

    element 的值为 "apple",sub_tuple 的值为 ("banana", "cherry")

  3. innot in:判断元素是否存在于元组中。

    tuple3 = (1, 2, 3, 4, 5)
    result1 = 3 in tuple3
    result2 = 6 not in tuple3

    result1 的值为 True,result2 的值为 True

  4. count():统计元组中某个元素的出现次数。

    tuple4 = (1, 2, 2, 3, 2, 4, 5)
    count = tuple4.count(2)

    count 的值为 3

  5. index():返回元素在元组中首次出现时的索引。

    tuple5 = (1, 2, 2, 3, 2, 4, 5)
    index = tuple5.index(2)

    index 的值为 1

  6. 元组拆包:将元组的值赋给多个变量。

    tuple6 = (1, 2, 3)
    a, b, c = tuple6

    a 的值为 1,b 的值为 2,c 的值为 3

  7. 不可变性:元组的元素不可修改。

    tuple7 = (1, 2, 3)
    tuple7[1] = 4 # 会报错,元组不可修改

元组相对于列表而言,由于其不可变性,具有更高的内存效率,同时也可以用作字典的键。然而,在需要频繁修改或添加元素时,列表更为适合。

需要注意的是,当只有一个元素的时候,需要在元素后面加上逗号,以区分元组和普通括号的语法,例如 tuple8 = (1,)

1.2.1.7集合(set)

集合是一个无序、可变的数据类型,用于存储唯一的元素。集合使用大括号 {}set() 构造,元素之间使用逗号 , 分隔。和数学中的集合类似,集合中的元素是唯一且不可重复的。

以下是集合常用的方法和操作:

  1. 创建集合:通过大括号或 set() 构造一个空集合或初始具有元素的集合。

    set1 = set()
    set2 = {"apple", "banana", "cherry"}

  2. 添加元素:使用 .add() 方法向集合中添加一个元素,注意重复的元素会被忽略。

    set3 = {"apple", "banana"}
    set3.add("cherry")

    set3 的值为 {"apple", "banana", "cherry"},添加了一个新的元素

    set3.add("apple")

    set3 的值仍然为 {"apple", "banana", "cherry"},忽略了重复的元素

  3. 删除元素:使用 .remove().discard() 方法删除集合中的指定元素。如果元素不存在,.remove() 会引发 KeyError,而 .discard() 不会抛出错误。

    set4 = {"apple", "banana", "cherry"}
    set4.remove("banana")

    set4 的值为 {"apple", "cherry"},删除了 "banana"

    set4.discard("orange")

    set4 的值仍然为 {"apple", "cherry"},因为 "orange" 不存在,.discard() 不会引发错误

  4. 运算操作:集合支持多种集合操作,如并集、交集、差集和对称差集。

    set5 = {"apple", "banana", "cherry"}
    set6 = {"cherry", "orange", "pear"}

    union = set5.union(set6)

    union 的值为 {"apple", "banana", "cherry", "orange", "pear"},并集

    intersection = set5.intersection(set6)

    intersection 的值为 {"cherry"},交集

    difference = set5.difference(set6)

    difference 的值为 {"apple", "banana"},差集,属于 set5 但不属于 set6 的元素

    symmetric_difference = set5.symmetric_difference(set6)

    symmetric_difference 的值为 {"apple", "banana", "orange", "pear"},对称差集,属于 set5 和 set6 中的元素但不重复的

  5. .update():使用另一个集合或可迭代对象中的元素更新当前集合。

    set7 = {1, 2, 3}
    set8 = {3, 4, 5}

    set7.update(set8)

    set7 的值为 {1, 2, 3, 4, 5},将 set8 中的元素添加到 set7 中

    set9 = {1, 2, 3}
    set9.update([3, 4, 5])

    set9 的值为 {1, 2, 3, 4, 5},将列表 [3, 4, 5] 中的元素添加到 set9 中

  6. .copy():复制一个集合的副本。

    set10 = {1, 2, 3}
    set11 = set10.copy()

    set11 的值为 {1, 2, 3},复制了 set10 的元素

集合是一种有用的数据类型,它可以帮助我们高效地进行去重、集合运算以及快速判断元素的存在性。需要注意的是,集合是无序的,元素的顺序是不确定的。

1.2.1.8字典 (dict)

字典是一种无序、可变的数据类型,用于存储键值对。它使用大括号 {}dict() 构造,每个键值对使用冒号 : 分隔,键值对之间使用逗号 , 分隔。字典中的键必须是唯一的,而值可以是任何数据类型。

以下是字典常用的方法和操作:

  1. 创建字典:通过大括号或 dict() 构造一个空字典或初始具有键值对的字典。

    dict1 = {}
    dict2 = dict()

    dict3 = {"name": "Alice", "age": 25, "country": "USA"}

  2. 访问元素:通过键来访问字典中的值。

    dict4 = {"name": "Bob", "age": 30, "country": "Canada"}
    name = dict4["name"]

    name 的值为 "Bob"

  3. 添加或修改元素:通过键来添加新的键值对,或通过键来修改对应的值。

    dict5 = {"name": "Alice", "age": 25, "country": "USA"}

    dict5["occupation"] = "Engineer"

    dict5 的值为 {"name": "Alice", "age": 25, "country": "USA", "occupation": "Engineer"}

    dict5["age"] = 26

    dict5 的值为 {"name": "Alice", "age": 26, "country": "USA", "occupation": "Engineer"}

  4. 删除元素:通过键来删除字典中的键值对。

    dict6 = {"name": "Alice", "age": 25, "country": "USA"}

    del dict6["age"]

    dict6 的值为 {"name": "Alice", "country": "USA"}

  5. .keys().values().items():获取字典的键、值、键值对。

    dict7 = {"name": "Alice", "age": 25, "country": "USA"}

    keys = dict7.keys()

    keys 的值为 ["name", "age", "country"]

    values = dict7.values()

    values 的值为 ["Alice", 25, "USA"]

    items = dict7.items()

    items 的值为 [("name", "Alice"), ("age", 25), ("country", "USA")]

  6. .get():根据键获取对应的值,如果键不存在,则返回默认值。

    dict8 = {"name": "Bob", "age": 30, "country": "Canada"}

    name = dict8.get("name")

    name 的值为 "Bob"

    gender = dict8.get("gender", "Unknown")

    gender 的值为 "Unknown",因为 "gender" 键不存在

  7. .update():用另一个字典中的键值对更新当前字典。

    dict9 = {"name": "Alice", "age": 25}
    dict10 = {"country": "USA", "occupation": "Engineer"}

    dict9.update(dict10)

    dict9 的值为 {"name": "Alice", "age": 25, "country": "USA", "occupation": "Engineer"}

字典是一种非常灵活且强大的数据结构,可用于存储和操作大量的关联数据。通过键值对的方式,使得数据的访问更加方便、快速。

1.2.2运算符与表达式

在 Python 中,运算符用于执行各种算术、逻辑和比较操作。而表达式是由运算符、操作数和函数调用组成的代码构造,用于计算结果。

以下是 Python 的常用运算符和表达式的介绍和示例:

1.算术运算符

    • +:加法运算,用于计算两个数的和。

      x = 5
      y = 3
      result = x + y # 结果为 8

    • -:减法运算,用于计算两个数的差。

      x = 5
      y = 3
      result = x - y # 结果为 2

    • *:乘法运算,用于计算两个数的积。

      x = 5
      y = 3
      result = x * y # 结果为 15

    • /:除法运算,用于计算两个数的商(浮点数除法)。

      x = 6
      y = 2
      result = x / y # 结果为 3.0

    • //:整数除法运算,用于计算两个数的商(整数除法)。

      x = 7
      y = 2
      result = x // y # 结果为 3

    • %:取模运算,用于计算两个数相除的余数。

      x = 7
      y = 3
      result = x % y # 结果为 1

    • **:幂运算,用于计算一个数的指数次幂。

      x = 2
      y = 3
      result = x ** y # 结果为 8

2.比较运算符

    • ==:检查两个值是否相等。
    • !=:检查两个值是否不相等。
    • >:检查左值是否大于右值。
    • <:检查左值是否小于右值。
    • >=:检查左值是否大于等于右值。
    • <=:检查左值是否小于等于右值。

这些比较运算符的结果是布尔值 TrueFalse。例如:

复制代码
x = 5
y = 3

result1 = x == y  # 结果为 False
result2 = x < y   # 结果为 False

3.逻辑运算符

    • and:逻辑与运算,当所有操作数都为 True 时,结果为 True
    • or:逻辑或运算,当任意一个操作数为 True 时,结果为 True
    • not:逻辑非运算,对操作数取反。

这些逻辑运算符通常用于组合多个条件表达式。例如:

复制代码
x = 5
y = 3
z = 7

result1 = x > y and x < z  # 结果为 True
result2 = x > y or x > z   # 结果为 True
result3 = not (x > y)      # 结果为 False

4.赋值运算符

    • =:简单赋值,将右侧的值赋给左侧的变量。
    • +=:加法赋值,将右侧的值加到左侧的变量上。
    • -=:减法赋值,将右侧的值减去左侧的变量。
    • *=:乘法赋值,将右侧的值乘到左侧的变量上。
    • /=:除法赋值,将右侧的值除到左侧的变量上。
    • //=:整数除法赋值,将右侧的值整数除到左侧的变量上。
    • %=:取模赋值,将右侧的值取模到左侧的变量上。
    • **=:幂赋值,将左侧的变量自身做指数运算。

赋值运算符用于修改变量的值。例如:

复制代码
x = 5
x += 3  # x 的值变为 8

5.成员运算符

    • in:检查某个值是否存在于序列(如字符串、列表或元组)中。
    • not in:检查某个值是否不存在于序列中。

成员运算符返回布尔值。例如:

复制代码
list1 = [1, 2, 3, 4, 5]

result1 = 3 in list1    # 结果为 True
result2 = 6 not in list1  # 结果为 True
1.2.3选择结构与条件判断

在 Python 中,条件判断用于根据不同的条件执行不同的代码块。常见的条件判断语句有 ifelifelse

以下是 Python 中条件判断的介绍和示例:

复制代码
if condition1:
    # 如果 condition1 为 True,则执行这里的代码块
    statement1
elif condition2:
    # 如果 condition1 为 False 而 condition2 为 True,则执行这里的代码块
    statement2
else:
    # 如果以上条件都为 False,则执行这里的代码块
    statement3

示例解析:

  • if 后面的 condition1 是一个条件表达式,需返回布尔值 TrueFalse。如果 condition1 为 True,则执行 if 后的代码块 statement1
  • 如果 condition1 不为 True,则继续判断 elif 后的 condition2。如果 condition2 为 True,则执行 elif 后的代码块 statement2
  • 如果以上所有条件都不为 True,则执行 else 后的代码块 statement3

示例代码:

复制代码
x = 5

if x > 10:
    print("x 大于 10")
elif x > 5:
    print("x 大于 5,但不大于 10")
else:
    print("x 不大于 5")

在这个例子中,我们判断了变量 x 的大小,并根据其值执行不同的代码块。根据变量 x 的值,输出结果为 "x 不大于 5"。

除了上述的基本条件判断,还有其他常用的条件判断方法:

1.多个条件的判断

    • and:当多个条件都为 True 时,才为 True。
    • or:当多个条件中至少有一个为 True 时,为 True。

示例:

复制代码
x = 5
y = 3

if x > 0 and y > 0:
    print("x 和 y 都大于 0")

2.判断值是否属于特定的范围

    • in:检查某个值是否存在于序列(如字符串、列表或元组)中。
    • not in:检查某个值是否不存在于序列中。

示例:

复制代码
fruit = "apple"

if fruit in ["apple", "banana", "orange"]:
    print("这是一个水果")

3. 复合条件判断

    • 可以使用多个条件判断语句来实现更复杂的逻辑判断。

示例:

复制代码
x = 5
y = 3

if x > 0:
    if y > 0:
        print("x 和 y 都大于 0")
    else:
        print("x 大于 0,但 y 不大于 0")
else:
    print("x 不大于 0")
1.2.4循环结构与循环体

在 Python 中,循环结构用于重复执行相同或类似的代码块。常见的循环结构有 for 循环和 while 循环。

以下是 Python 中循环结构的介绍和示例:

1.for****循环

for 循环用于遍历序列(如字符串、列表或元组)中的元素。循环体中的代码会依次对序列中的每个元素执行。

复制代码
for element in sequence:
    # 执行循环体中的代码,针对当前元素
    statement

示例:

复制代码
fruits = ["apple", "banana", "orange"]

for fruit in fruits:
    print(fruit)

输出结果为:

复制代码
apple
banana
orange

2. while****循环

while 循环根据一个条件判断执行代码块,只要条件为 True,循环会一直持续进行。

复制代码
while condition:
    # 执行循环体中的代码
    statement

示例:

复制代码
count = 0

while count < 5:
    print(count)
    count += 1

输出结果为:

复制代码
0
1
2
3
4

除了基本的 for 循环和 while 循环外,还有其他常用的循环控制方法:

3. break****语句

break 语句用于立即终止循环,并跳出循环体。

示例:

复制代码
numbers = [1, 2, 3, 4, 5]

for number in numbers:
    if number == 3:
        break
    print(number)

输出结果为:

复制代码
1
2

4. continue****语句:

continue 语句用于跳过当前循环迭代,继续下一次循环迭代。

示例:

复制代码
numbers = [1, 2, 3, 4, 5]

for number in numbers:
    if number == 3:
        continue
    print(number)

输出结果为:

复制代码
1
2
4
5

循环结构可以帮助我们重复执行代码块,依次处理元素或根据条件执行特定的操作。同时,循环控制语句(如 breakcontinue )可以更灵活地控制循环的行为。

1.2.5数据的输入和输出

1.input()函数

input() 函数是 Python 内置的一个函数,用于从键盘读取用户的输入,并将其作为字符串类型返回。这个函数可以接受一个可选的提示字符串,该字符串将用于提示用户输入。

下面是 input() 函数的常用方法和示例:

基本使用:
input() 函数的最基本用法是直接调用该函数,然后等待用户输入:

复制代码
x = input()
print(x)

运行该程序后,当代码执行到 input() 函数时,程序将暂停执行,并等待用户输入。用户输入完成后,程序会读取用户输入的字符串,并将其赋值给变量 x,然后将 x 的值打印出来。

提示用户输入:

我们可以向 input() 函数传递一个字符串参数,该参数将用于提示用户输入。这个字符串通常是可选的。

复制代码
name = input("请输入你的名字:")
print("你好," + name + "!")

在这个示例中,当代码执行到 input() 函数时,程序将暂停执行,并在控制台上输出 "请输入你的名字:",然后等待用户输入。用户输入完成后,程序将读取用户输入的字符串并将其赋值给变量 name,最后将 name 的值拼接成一句问候语。

转换输入的数据类型:

由于 input() 函数始终将用户输入的内容作为字符串返回,在需要使用其他类型的数据时,需要将其转换为相应的类型。常用的做法是使用 int()float() 等内置函数进行强制类型转换。

复制代码
age = input("请输入你的年龄:")
age = int(age)
print("你的出生年份是:" + str(2023 - age))

在这个示例中,我们先通过 input() 函数获取用户输入的一个字符串,然后使用 int() 函数将其转换成整数类型,最后使用 str() 函数将计算后的字符串拼接成一句话输出。

2.print()函数

print() 函数是 Python 内置的一个函数,用于将指定的对象输出到标准输出设备(通常是控制台)。它可以接受多个参数,并以空格作为默认分隔符将它们打印出来。

下面是 print() 函数的常用方法和示例:

打印字符串:
print() 函数最常见的用法是直接传递一个字符串作为参数,它会将该字符串打印到控制台:

复制代码
print("Hello, World!")

运行该程序后,print() 函数将会在控制台上输出字符串 "Hello, World!"

打印变量:

我们可以将变量作为参数传递给 print() 函数,它会打印出变量的值:

复制代码
name = "Alice"
print("My name is", name)

运行该程序后,print() 函数将会输出 "My name is Alice",注意到 print() 函数会以空格作为默认分隔符将参数打印出来。

格式化输出:
print() 函数还支持使用格式化字符串对输出进行格式化,常用的是使用 % 运算符或者 .format() 方法:

复制代码
score = 95
print("Your score is %d" % score)

age = 28
print("I am {} years old".format(age))

上述的两个示例分别使用了 % 运算符和 .format() 方法来格式化输出,输出语句根据变量的值进行相应的替换。

控制换行:

默认情况下,每个 print() 函数调用会在输出的末尾添加一个换行符 \n,从而使下一个输出从新的一行开始。如果不希望换行,可以使用 end 参数来自定义结束字符:

复制代码
print("Hello,", end=" ")
print("World!")

这个示例中,我们将 end 参数设置为空格,使 "Hello,""World!" 打印在同一行上。

1.2.6文件读写

Python 提供了一组用于进行文件读写操作的内置函数,可以方便地读取和写入文件中的数据。常用的文件读写方法包括:

  1. 打开文件:
    使用 open() 函数可以打开一个文件,并返回一个文件对象。我们需要指定文件的路径和打开模式。

    file = open("example.txt", "r")

这个示例中,我们使用 "example.txt" 作为文件路径,并使用 "r" 作为打开模式,表示以只读模式打开文件。

  1. 读取文件内容:
    在打开文件后,可以使用文件对象的 read()readlines() 方法来读取文件中的内容。
    • read() 方法用于将整个文件的内容作为一个字符串返回。

      content = file.read()

    • readlines() 方法用于以列表的形式返回文件中的所有行。

      lines = file.readlines()

  1. 写入文件:
    在打开文件后,可以使用文件对象的 write() 方法将数据写入文件。

    file.write("Hello, World!")

这个示例将字符串 "Hello, World!" 写入到文件中。

  1. 关闭文件:
    在文件操作完成后,应该使用 close() 方法关闭文件,释放资源。

    file.close()

注意,使用 open() 打开文件后,必须在操作完成后显式调用 close() 方法来关闭文件。

除了上述常用的文件读写方法之外,还有其他一些常用方法,例如:

  • writelines():以列表的形式将多行数据写入文件。
  • seek():用于移动文件指针到文件的指定位置。
  • tell():返回当前文件指针的位置。
  • with 语句:提供了一种更便捷的方式来自动管理文件的打开和关闭,不需要显式调用 close() 方法。

以下是一个完整的文件读写的例子:

复制代码
# 打开文件
file = open("example.txt", "w")

# 写入数据
file.write("Hello, World!\n")
file.write("This is an example.")

# 关闭文件
file.close()

# 打开文件
file = open("example.txt", "r")

# 读取数据
content = file.read()
lines = file.readlines()

# 输出结果
print(content)
print(lines)

# 关闭文件
file.close()

通过掌握这些方法,我们可以在 Python 程序中方便地读取和写入文件中的数据。同时,要记得在操作完成后显式关闭文件,以释放资源。

1.2.7函数

函数是一段封装了特定功能的可复用代码块。Python 中的函数可以帮助我们将程序组织成较小的模块,提高代码的可读性和可维护性。常用的函数方法包括:

  1. 定义函数:
    使用 def 关键字可以定义一个函数,然后给函数起一个名称,并指定函数的参数和代码块。

    def greet(name):
    print("Hello, " + name + "!")

在这个示例中,我们定义了一个名为 greet 的函数,它有一个参数 name。在函数体内,我们使用 print() 函数来打印出问候语,问候语中使用了参数 name 的值。

  1. 调用函数:
    通过函数名称和传递给函数的实际参数值,可以调用函数并执行其中的代码块。

    greet("Alice")

这个示例中,我们调用了函数 greet,并将字符串 "Alice" 作为实际参数传递给函数。函数执行后,将会输出 "Hello, Alice!"

  1. 返回值:
    函数可以通过 return 语句返回一个值给调用者。调用函数时,可以将返回的值赋给一个变量。

    def add(a, b):
    return a + b

    result = add(3, 5)
    print(result)

在这个示例中,我们定义了一个名为 add 的函数,它有两个参数 ab,并返回它们的和。在函数调用时,我们将实际参数 35 传递给函数,并将返回值赋给变量 result。最后,将变量 result 的值打印出来。

  1. 默认参数:
    在函数定义时,可以为参数指定默认值,这样在函数调用时,如果没有为参数提供实际值,将使用默认值来代替。

    def greet(name="World"):
    print("Hello, " + name + "!")

    greet() # 输出 "Hello, World!"
    greet("Alice") # 输出 "Hello, Alice!"

这个示例中,函数 greet 的参数 name 使用了默认值 "World"。当函数不带参数调用时,将使用默认值进行处理;而当函数传递了参数 "Alice" 时,将使用实际参数值。

  1. 可变数量的参数:
    使用 *args**kwargs,可以定义接受可变数量参数的函数。*args 用于接受任意数量的位置参数,而 **kwargs 用于接受任意数量的关键字参数。

    def print_values(*args, **kwargs):
    for arg in args:
    print(arg)
    for key, value in kwargs.items():
    print(key + " = " + value)

    print_values("apple", "banana", name="Alice", age="25")

在这个示例中,函数 print_values 接受任意数量的位置参数和关键字参数。在函数体内,我们使用 for 循环分别遍历位置参数和关键字参数,并将它们打印出来。

通过使用函数,我们可以将代码组织成可复用的块,提高代码的可读性和可维护性。同时,函数还支持默认参数、可变数量的参数等高级功能,使函数的使用更加灵活。

1.2.8类

类是一种面向对象编程的工具,它是一种抽象数据类型,用于描述具有共同属性和方法的对象。Python 中的类可以让我们更好地组织和管理代码,实现代码的重用性和扩展性。常用的类方法包括:

  1. 定义类:
    使用 class 关键字可以定义一个类,并指定类的名称。

    class Person:
    def init(self, name):
    self.name = name

    复制代码
     def greet(self):
         print("Hello, my name is " + self.name)

在这个示例中,我们定义了一个名为 Person 的类。类中有两个方法:__init__greet__init__ 方法是一个特殊的方法,用于初始化对象的属性。greet 方法用于输出问候语,并使用对象的属性值。

  1. 创建对象:
    通过类名和实际参数值,可以创建类的对象。

    person = Person("Alice")

在这个示例中,我们使用类名 Person 创建了一个名为 person 的对象。在创建对象时,可以向类的 __init__ 方法传递参数值。

  1. 访问属性:
    通过对象名和属性名称,可以访问对象的属性。

    print(person.name)

这个示例中,我们通过对象名 person 和属性名称 name,访问了对象的属性。将会输出属性值 "Alice"

  1. 调用方法:
    通过对象名和方法名称,可以调用对象的方法。

    person.greet()

在这个示例中,我们通过对象名 person 和方法名称 greet,调用了对象的方法。将会输出问候语 "Hello, my name is Alice"

  1. 继承:
    类之间可以通过继承建立父类和子类的关系。子类可以继承父类的属性和方法,并可以根据需要进行扩展和重写。

    class Student(Person):
    def init(self, name, student_id):
    super().init(name)
    self.student_id = student_id

    复制代码
     def study(self):
         print("I'm studying.")

    student = Student("Bob", 12345)
    student.greet()
    student.study()

在这个示例中,我们定义了一个名为 Student 的子类,它继承自父类 Person。子类在初始化方法中使用 super() 函数调用父类的初始化方法,并扩展了一个新的方法 study。通过创建子类的对象,可以调用父类的方法和子类的方法。

通过使用类,我们可以将相关的属性和方法组织在一起,并实现代码的重用性和扩展性。同时,类还支持继承和方法重写等特性,使代码更加灵活和模块化。

1.3Python遥感深度学习境配置

Python遥感深度学习主要用到的Python库有:

  1. NumPy:虽然NumPy本身并不是专门针对遥感数据或深度学习的,但它提供了处理大型多维数组和矩阵的高效方法,是许多其他高级库的基础。
  2. Scikit-Image:这是一个专注于图像处理的库,适合用于图像的分割、色彩空间转换、形态学操作等基础处理操作。
  3. GDAL (Geospatial Data Abstraction Library):GDAL 是一个开源的地理空间数据转换库,支持多种数据格式的读写,非常适合处理包括遥感图像在内的地理空间数据。
  4. Rasterio:这是一个基于 GDAL 的 Python 包,专门用来读写栅格数据集。它为读取遥感图像和元数据提供了更简洁的接口。
  5. OpenCV:OpenCV(Open Source Computer Vision Library)是一个强大的计算机视觉库,能够处理视频和图像,广泛应用于图像处理、特征检测等领域。
  6. SciPy:SciPy 是基于 NumPy 的科学计算库,提供了许多用于科学和技术计算的功能,包括用于优化、统计和信号处理等功能,这些功能在遥感数据处理中也非常有用。
  7. PyTorch:是最流行的深度学习库之一,它们提供了强大的框架来构建和训练深度学习模型。无论是卷积神经网络、循环神经网络还是更复杂的架构,这两个库都提供了全面的支持。
  8. GeoPandas:GeoPandas 是一个用于处理地理数据的开源Python库,它扩展了 pandas 库以支持空间操作。使用 GeoPandas 可以轻松地处理地理数据集上的空间信息。

当然除了以上库,还有一些工具库,可以自行安装。配置流程参考实践篇 1.1.1.3Python环境配置

注意:PyTorch安装有CPU和GPU两个版本,大家根据自己的电脑的情况安装,有独立显卡安装GPU版,没有安装CPU版,这个安装可以参考pytorch官网教程,使用命令行安装:https://pytorch.org/get-started/locally/

请见xy 用户:geedownload

或者xy 搜索 深度学习遥感地物分类-以建筑分割和多地物分割为例

相关推荐
好好学习啊天天向上6 小时前
C盘容量不够,python , pip,安装包的位置
linux·python·pip
时见先生6 小时前
Python库和conda搭建虚拟环境
开发语言·人工智能·python·自然语言处理·conda
二十雨辰6 小时前
[python]-循环语句
服务器·python
Yvonne爱编码6 小时前
Java 四大内部类全解析:从设计本质到实战应用
java·开发语言·python
wqwqweee7 小时前
Flutter for OpenHarmony 看书管理记录App实战:搜索功能实现
开发语言·javascript·python·flutter·harmonyos
-To be number.wan8 小时前
Python数据分析:numpy数值计算基础
开发语言·python·数据分析
昨夜见军贴06168 小时前
IACheck AI审核在生产型企业质量控制记录中的实践探索——全面赋能有关物质研究合规升级
大数据·人工智能
智星云算力9 小时前
智星云镜像共享全流程指南,附避坑手册(新手必看)
人工智能
盖雅工场9 小时前
驱动千店销售转化提升10%:3C零售门店的人效优化实战方案
大数据·人工智能·零售·数字化管理·智能排班·零售排班
Loo国昌9 小时前
深入理解 FastAPI:Python高性能API框架的完整指南
开发语言·人工智能·后端·python·langchain·fastapi