python基础入门与进阶教程

一. Python简介

1. 什么是Python

  • 高层次脚本语言
  • 解释性、编译性、互动性、面向对象于一体
  • 语法简单易懂,对初学者友好
  • 注重如何解决问题,而非编程语言的语法和结构

2. Python语言特点

  • 跨平台:Python在不同操作系统上都能运行,无需修改代码。
  • 可扩展性:如果需要性能更高或需要与其他语言交互,可以使用C或者C++编写Python扩展模块。
  • 运行速度有限,有速度要求的话,可以C++改写关键部分
  • 即是优点也是缺点,python的开源性使得语言不能加密。
  • 相比于MATLAB,Python是一门真正的通用程序设计语言

二. Python基础入门

1. 基础语法

(1) 注释
  • 单行注释使用 # 号,多行注释三个双引号或三个单引号
    # 第一个注释
    print("Hello,Python!")   # 第二个注释
    
    """
    这是多行注释,使用双引号。
    这是多行注释,使用双引号。
    """
    
(2) 缩进规则
  • python使用缩进来写模块,而非{}
    # 利用缩进写if/else语句块,判断x与y大小
    x = float(input("Enter a number for x: "))
    y = float(input("Enter a number for y: "))
    if x == y:
        print("x and y are equal")
    print("thanks!")
    
(3) Print输出
  • print() 在括号中加上字符串,就可以向屏幕上输出指定的文字
    print("This is CompMat")                # 字符串输出
    
  • print() 也可接受多个字符串,用 “,” 隔开
    print("This","is","CompMat")            # 多个字符串输出
    
  • 字符串包含有单(双)引号,用双(单)引号表示即可
    print('"Hello" in "Quotes"')            # 带引号的字符串输出
    
(4) 格式化输出
  • print函数默认在输出后添加换行符。若不换行,需要在变量末尾加上end=""或其他非换行符字符串
  • 使用字符串的 format() 方法可以格式化输出内容
  • Python3.6版本引入了一种新的格式化方式 “f-string”
    # 含变量的字符串输出
    x = 11                                   
    print(x,end="***")                             # 字符串输出,以"***"结束
    print("my fav num is",x,".","x =",x)           # 含变量的字符串输出
    x_str = str(x)                                 # 将x转换为字符型并赋给x_str
    print(f"my fav num is {x_str}.x = {x_str}")                    # f-string格式化输出
    
(5) 输入
  • input 函数可读入用户输入内容,按字符串类型存储
    # input函数的使用
    text = input("Type anything... ") 
    print(type(text))                               # 显示数据类型
    num = int(input("Type a number... "))           # 强制转换为整数
    print(type(num))                                # 输入字符串
    

2. 基本数据类型

(1) 变量赋值
  • Python中的变量不需要声明
    1 .每个变量在使用前必须赋值,赋值以后该变量才会被创建
    2 .在Python中,变量是个对象,没有类型;所谓“类型”是变量所指的内存中的对象的类型
  • 等号 (=) 用来给变量赋值
    1 .等号 (=) 运算符左边是一个变量名;等号 (=) 运算符右边是存储在变量中的值
(2) 基础类型
  • 布尔 (bool)
    只有True和False两个值,表示真或假。True、False可作为0、1与数值类型相加
  • 整型 (int)、浮点型 (float)、复数 (complex)
    1 .整数值,可正数亦可负数
    2 .浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示 (2.5e2 = 2.5×102 = 250)
    3 .复数由实数部分和虚数部分构成,可以用 a + b a+b a+bj,或者complex(a,b)表示,复数的实部 a a a和虚部 b b b都是浮点型
(3) 字符串类型
  • 字符串 (string)
    双引号与单引号等价;字符串可通过 + 进行拼接
    # example
    hi = "hello there"
    name = "Eric"
    greet = hi + name
    greeting = hi + " " + name
    print(greet)
    print(greeting) 
    
    # output:
    hello thereEric
    hello there Eric
    
  • 字符串 (string) 可以进行索引、切片(与list类似),但不可部分赋值
    # example
    name = "Eric"
    print(3*name)
    print(len(name))
    print(name[1])
    print(name[1:3])
    
    # output:
    EricEricEric
    4
    r
    ri
    
(4) 列表 (list)
  1. 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字——它的位置,或索引,第一个索引是0,第二个索引是1,依次类推。
  2. 最常见的是列表 (list)元组 (tuple)
  3. 序列都可以进行的操作包括索引,切片,加,乘,检查
  4. 列表的数据项不需要具有相同的类型
  • 创建列表
    list1 = [1,2,3,4,5]
    list2 = ['Google','Bing',1997,2000]               # 列表数据类型可以不同
    list3 = [[1,2],[3,4]]                             # 列表可以嵌套
    
  • 更新列表
    list1[0] = "baidu"                        # 更新list1的索引0的值
    list1.append(2)                          # 添加到list1
    
  • 删除列表元素
    del list1[2]                            # 删除索引为2的元素
    list.remove(3)                         # 删除值为3的元素
    list.pop(3)                            # 删除索引为3的元素 
    
  • 把元素插入到指定的位置
    list1.insert(1,'Jack')
    
  • 切片和拼接
    L = ['Google','Bing',1997,2000]
    L2 = [1,2,3]
    print('',"L[0]:",L[0])                         # 索引为0的元素
    print('',"L[-1]:",L[-1])                      # 索引为-1,即最后一个
    print('',"L[1:]:",L[1:])                      # 取索引为1的及后面元素
    print('',"L[1:3]:",L[1:3])                    #取索引为[1,3)的元素
    print('',"L+L2:",L+L2)                    
    
    # output:
    L[0]:Google
    L[-1]:2000
    L[1:]:['Bing',1997,2000]
    L[1:3]:['Bing',1997]
    L+L2:['Google','Bing',1997,2000,1,2,3]
    
  • 嵌套列表
    # example
    a = ['a','b','c']
    n = [1,2,3]
    x = [a,n]
    print("x:",x)
    print("x[0]:",x[0])
    print("x[0][1]:",x[0][1])
    
    # output:
    x:[['a','b','c'],[1,2,3]]
    x[0]:['a','b','c']
    x[0][1]:b
    
  • Python列表常用函数&方法
    1 .len(list):列表元素个数
    2 .max(list):返回列表元素最大值
    3 .min(list):返回列表元素最小值
    4 .list(seq):将元组转换为列表
    5 .list.append(obj):在列表末尾添加新的对象
    6 .list.count(obj):统计某个元素在列表中出现的次数
    7 .list.index(obj):从列表中找出某个值第一个匹配项的索引位置
    8 .list.reverse():反向列表中元素
(5) 元组 (tuple)
  1. Python的元组与列表相似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
  • 创建元组
    tup1 = ('Google','Bing',1997,2000)
    
  • 组合元组
    tup3 = tup1 + tup2 
    
  • 删除元组
    del tup1
    
  • 元组索引,截取
    与列表类似
(6) 集合 (set)
  1. 集合跟数学上的集合是一致的,不允许有重复元素,而且可以进行交集、并集、差集等运算
  • 创建集合
    可以使用大括号{}或者set()函数创建集合
    set1 = set('abracadabra')
    print(set1)                          # ('a','r','b','c','d')
    
  • 添加元素
    set1.add("f")
    
  • 移除元素
    set1.remove("a")
    
  • 数学操作
    交集:set1 & set2   并集:set1 | set2   差集:set1 - set2
(7) 字典 (dictionary)
  1. 字典是另一种可变容器模型。与列表、集合不同的是,字典的每个元素都是由一个键和一个值组成的 “键值对”,键和值通过冒号分开。
        dict1 = {key1 : value1 , key2 : value2 , key3 : value3}
  2. 键必须是唯一的,但值则不必,值可以取任何数据类型,但键必须是不可变的,如字符串,数字,元组。
  • 访问字典里的值
    通过键可以获取字典中对应的值,使用字典里没有的键访问数据会报错
    v1 = dict1["key1"]                         # v1 = value1
    
  • 更新字典中的元素
    dict1["key2"] = 10                         # value = 10
    
  • 删除字典元素
    del dict1['Name']
    

3. 运算符

(1) 基本运算符
算数运算符#比较运算符#赋值运算符#
+  -加 减==等于=简单的赋值运算符
* /乘 除!=不等于+=加法赋值运算符
**>大于-=减法赋值运算符
//整除<小于*=乘法赋值运算符
%取模>=大于等于/=除法赋值运算符
a = 5 ** 3
print(a)                             # 125
flag = (1 <= 2 <= 3)
print(flag)                          # True
b = 2
b += 1                              # b = 3
b *= b+2                            # b = b*(b+2)
print(b)                            # 15
(2) 逻辑运算符
运算符逻辑表达式描述
andx and y如果两个操作数都为True,则返回True;否则返回False
orx or x如果两个操作数中至少有一个为True,则返回True;如果两个操作数都为False,则返回False
notnot x用于取反操作,如果操作数为True,则返回False;如果操作数为False,则返回True
flag0 = True and False            # flag0 = False
flag1 = True or False             # flag1 = True
flag2 = not (1 != 2)              # flag2 = False
# 判断是否为闰年:
year % 4 == 0 and year % 100 != 0 or year % 400 == 0 
(3) 运算符实例
# 判断输入数的奇偶
x = int(input('Enter an integer:'))
if x%2 == 0:
    print('Even')
else:
    print('Odd')
print('Done with conditional')
# output:
Enter an integer:7
Odd
Done with conditional

4. 流程控制

(1) 什么是流程控制

在进行程序设计的时候,我们会经常进行逻辑判断,根据不同的结果做不同的事,或者重复做某件事,我们对类似这样的工作称为流程控制

  1. 顺序控制
    从左到右,从上到下的顺序依次执行每条语句操作
  2. 条件控制(选择控制)
    基于条件选择执行语句,比方说,如果条件成立,则执行操作A,或者如果条件成立,则执行操作A,反之则执行操作B
  3. 循环控制
    循环控制,又称为回路控制,根据循环初始条件和终结要求,执行循环体内的操作
(2) 选择控制
  • if 语句(决策)
    Python 中用elif替代了else if,所以if语句的关键字为:if—elif—else
    f ( x ) = { 3 x − 5 ( x > 1 ) x + 2 ( − 1 ≤ x ≤ 1 ) 5 x + 3 ( x < − 1 ) f(x)=\begin{cases} 3x-5 & (x>1)\\x+2 & (-1\le x\le 1) \\5x+3 & (x<-1) \end{cases} f(x)= 3x5x+25x+3(x>1)(1x1)(x<1)
    # example
    x = float(input('x = '))
    if x > 1:
         y = 3 * x - 5
    elif x >= -1:
         y = x + 2
    else:
         y = 5 * x + 3
    print(f'f({x}) = {y}')
    
(3) while循环
  • while中的else是可选的,如果提供了else语句,则else语句一定执行。除非是通过break语句退出的循环
    # example
    n = input("You are lost in a forest.Go left or right?")
    while "right" == n:
          n = input("You are lost in a forest.Go left or right?")
    print("You got out of the forest!")
    
    # output:
    You are lost in a forest.Go left or right? right
    You are lost in a forest.Go left or right? right
    You are lost in a forest.Go left or right? left
    You got out of the forest!
    
(4) for循环
  • 可遍历序列成员(字符串、列表、元组)
  • 可遍历任何可迭代对象(字典、文件等)
    sum = 0
    for i in range(1,100,2):
          sum += i
    print('The sum of odd numbers from 0 to 100:',sum)
    
    # output:
    The sum of odd numbers from 0 to 100:2500
    # 
    range(start,stop[,step])
    返回的是一个可遍历序列对象,计数区间为[start,stop),两个数间隔(步长)为step
    
    # example
    s = "abcdefgh"
    for index in range(len(s)):            # 通过索引获取元素
         if 'i' == s[index] or 'u' == s[index]:
               print("There is an i or u")        
    for char in s:                        # 直接从字符串中取出元素
         if 'i' == char or 'u' == char:
               print("There is an i or u")
    
  • 循环控制语句
    1 .break
    用在for循环和while循环语句中。break语句是会立即退出循环,在其后边的循环代码不会被执行
    2 .coutinue
    使循环跳过其主体的剩余部分,并立即进入下一次循环
    3 .pass
    当语法需要但不需要执行任何命令或代码时,Python中就可以使用pass语句,此语句什么也不做,用于表示“占位”的代码
    numbers = [1,2,3,4,5]
    for num in numbers:
         if num % 2 == 0:
             continue
         print(num)
    for num in numbers:
         if num == 3:
             break
         print(num)
    for num in numbers:
         if num == 3:
             pass
         print(num)
    
(5) 列表推导式
  • 利用列表推导式能更简单的创建列表的方法,语法如下:
    [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
    # example
    x = [1,2,3,4,5,6]
    out1 = [n ** 2 for n in x]
    print(out1)          # [1,4,9,16,25,36]
    out2 = [n ** 2 for n in x if n % 2 == 0]
    print(out2)          # [4,16,36]
    

5. 函数

(1) Python函数
  • 什么是函数?
    如果我们再开发程序的时候,某一段代码,需要执行很多次,但是为了提高编写的效率以及代码的复用,所以我们把这一段代码封装成一个模块,这就是函数。
  • 函数的作用
    函数能提供应用的模块性,和代码的重复利用率
    注:Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数
(2) 定义函数
  1. 函数由两部分组成:声明部分和实现部分
  2. 函数名:类似于变量名,尽量做到顾名思义
  3. 参数1,参数2,参数3…:参数列表(形式参数,简称为形参),其实本质上就是一个变量名
  4. 函数体:封装的功能代码
  5. 返回值:一般用于结束函数,可有可无,如果有返回值,则表示将相关的信息携带出去,携带给调用者,如果没有返回值,则相当于返回None
    def is_even(i):
        """
        Input: i,a positive int
        Returns True if i is even,otherwise False
        """
        return 0 == i % 2                 # 函数体
    print('',is_even(3))                  # 函数调用
    
(3) 默认参数
  • 函数的参数可以有一个默认值,默认参数以赋值语句的形式提供
  • 函数调用时如果没有提供这个参数,它就取这个值作为默认值
    def my_abs(x=3):
         if x >= 0:
               return x
         else:
               return -x
    print(my_abs())
    print(my_abs(-4))
    
(4) 位置参数
  • 一个函数可以有多个参数,各个参数用逗号隔开
  • 在定义函数时有N个参数。在调用时,也需要提供N个参数
    def my_max(number1,number2):
         if number1 > number2:
               print(number1)
         else:
               print(number2)
    my_max(4,10)
    
(5) 关键字参数
  • 如果在函数里边,定义了10个参数,那每次必须都要按照位置写,容易造成混乱。这时候,我们可以用关键字参数。使用关键字参数允许函数调用时参数的顺序与声明时不一致
    def my_hobby(name,hobby)
          print('',name+"喜欢"+hobby)
    my_hobby("DaChu","Python")
    my_hobby("Python","DaChu")
    my_hobby(hobby="Python",name="DaChu")
    

三. 科学计算包Numpy

1. 什么是模块

(1) 什么是Python Modules

   Python Module(模块),包含Python对象定义和Python语句。模块能定义函数、类和变量,也可以包含可执行的代码。

  • 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块
  • 模块名同样也是一个标识符,需要符合标识符的命名规则
  • 在模块中定义的全局变量、函数、类都是提供给外界直接使用的 工具
  • 模块 就好比是 工具包,要想使用这个工具包中的工具,就需要先导入这个模块
(2) 如何导入和使用Modules
  1. 采用 import module_name
    1.可以通过import关键字导入模块,如下:
      import math
    2.导入多个模块时,以逗号相隔
      import math,numpy...
    3.导入多个模块时,建议采用每个模块单独占行的模式
      import math
      import numpy
    
  2. 模块导入后,可以通过 module_name.method 的方式使用提供的工具——函数、类、全局变量
    # 示例如下
    import math
    import numpy
    math.sin(math.pi)
    numpy.random.rand(3)
    
  3. 采用 from module_name import method
    1.如果希望从某一个模块导入一部分指定工具 ,可以使用from ... import ...的方式
      # 示例如下
      from math import sin,cos
      from numpy import random
    2.通过这种方式导入,不需要再通过模块名,可以直接使用其提供的工具——函数、类、全局变量
      # 示例如下
      from math import sin,cos
      print(sin(0.5))
    
  4. 采用 import module_name as alias
    模块导入后,可以通过alias.method的方式使用提供的工具——函数、类、全局变量
    # 示例如下
    import numpy as np
    import pandas as pd
    a = np.sin(0.5)
    
(3) 常用的Modules及功能
名称功能常用指令
os 模块提供与操作系统交互的函数和方法,如文件路径操作、进程管理等os.getcwd() 获取当前工作目录
os.listdir(path) 列出指定目录的文件名
os.remove(path) 删除指定路径的文件
math 模块提供数学运算相关功能,包括数值运算、三角函数、对数等math.pi 获取圆周率 π \pi π的值
math.sqrt(x) 计算平方根
math.sin(x) 计算正弦值
numpy 模块用于进行科学计算和数值操作,提供了多维数组对象和各种数学函数numpy.array(object) 创建一个数组
numpy.zeros(shape) 创建一个指定形状的全零数组
numpy.mean(array) 计算数组的平均值
pandas 模块用于数据分析和处理,提供了高性能、易用的数据结构和数据分析工具pandas.DataFrame(data) 创建一个数据帧对象
pandas.read_csv(filepath) 从CSV文件读取数据
pandas.DataFrame.describe() 统计数据的基本信息
matplotlib 模块用于绘制各种类型的图表和可视化,提供了类似于MATLAB的绘图接口matplotlib.pyplot.plot(x,y) 绘制折线图
matplotlib.pyplot.scatter(x,y) 绘制散点图
matplotlib.pyplot.xlabel(label) 设置x轴标签

2. Numpy简介

(1) 什么是Numpy

   NumPy(Numerical Python)是使用Python进行科学计算的基础软件包

  • 支持高纬度数组和矩阵运算
  • 针对数组运算提供大量的数学函数库
  • 底层主要用C语言编写,能够高效地执行数值计算
  • Numpy的核心是连续的多维数组
(2) Numpy的优点
  1. 与list不同,Numpy数组存储在内存中的一个连续位置,因此进程可以非常有效地访问和操作他们
    例: 1000 x 1000 matrix multiply
         Python triple loop tasks > 10 min
         Numpy tasks ~0.03 seconds
    
  2. NumPy(Numerical Python) 支持大量的维度数组矩阵运算,此外也针对数组运算提供大量的数学函数库
(3) Numpy的使用
  • 引入numpy第三方库
    1. 在终端命令行键入下列命令安装numpy:
        pip install numpy
    2. 进去Python,键入下列命令引入numpy:
        import numpy as np
  • 创建数组
    m = np.array([1,2,3])
    
(4) 与list的差别
  1. NumPy中,通过使用数组对象执行列表相加操作,逐个对应元素相加返回一个新的数组
    # 使用NumPy进行列表相加
    import numpy as np
    arr1 = np.array([1,2,3])
    arr2 = np.array([4,5,6])
    result1 = arr1 + arr2
    print(result1)
    # 输出:[5,7,9]
    
  2. 在Python列表中,list相加等同于列表串联
    # 使用Python列表进行列表相加
    list1 = [1,2,3]
    list2 = [4,5,6]
    result2 = list1 + list2
    print(result2)
    # 输出:[1,2,3,4,5,6]
    

3. Numpy 数组

(1) 创建数组
  1. 什么是ndarray
       numpy.ndarray:ndarray是N维数组类型的对象,与python基本数据列表相比具有以下特点:
         I 存放同类型元素(列表可以存储不同类型的数据)
         II ndarray以 0 下标为开始索引
         III Ndarray在存储的数据类型上做限制,换取了运算效率的提升
  2. Numpy的一维数组
    1.查询数组的类型:type
             a = np.array([1.2,2.0,3.0,-1.0,2.0])
             print(type(a))
       输出:<class'numpy.ndarray'>
    2. 获取数组中有多少元素:len/shape(形状)
              print(len(a))
              print(a.shape)
       输出:5
             (5,)
    
  3. Numpy的二维数组
    创建Numpy二维数组(矩阵):
              A = np.array([[2.0,-1.0,0.0,0.0,0.0],
                           [-1.0,2.0,-1.0,0.0,0.0],
                           [0.0,-1.0,2.0,-1.0,0.0],
                           [0.0,0.0,-1.0,2.0,-1.0],
                           [0.0,0.0,0.0,-1.0,2.0]
                           ])
             A.ndim              # 查看维度
             2
             A.shape             # 查看形状
             (5,5)
    
  4. 特殊矩阵的创建方法
    1.创建单位矩阵:np.eye()
       np.eye(5)
       array([[1.,0.,0.,0.,0.],
              [0.,1.,0.,0.,0.],
              [0.,0.,1.,0.,0.],
              [0.,0.,0.,1.,0.],
              [0.,0.,0.,0.,1.]])
    2.创建顺序排列矩阵:np.arange().reshape()
       B = np.arange(25).reshape(5,5)
       array([[0,1,2,3,4],
              [5,6,7,8,9],
              [10,11,12,13,14],
              [15,16,17,18,19],
              [20,21,22,23,24]])
    
  5. 其他创建array的方法
函数描述
np.arange(x,y,i)创建由x到y,以i为步长的数组
np.linspace(x,y,n)创建由x到y,等分成n个元素的数组
np.random.rand(m,n)创建m行n列的随机数组
np.ones((m,n),dtype)创建m行n列的全1数组,dtype是数据类型
np.zeros((m,n),dtype)创建m行n列全0数组,dtype是数据类型
np.indices((m,n))创建m行n列的矩阵
  1. Numpy数组对象的基本对象
ndarray.ndim秩,即轴的数量或维度的数量
ndarray.shape数组的维度,对于矩阵,n 行 m 列
ndarray.size数组元素的总个数,相当于. shape 中 n*m 的值
ndarray.dtypendarray对象的元素类型
ndarray.itemsizendarray对象中每个元素的大小,以字节为单位
ndarray.realndarray元素的实部
ndarray.imagndarray元素的虚部
(2) 数组的访问
  1. 一维数组的访问
    设有一维数组a:a = np.array([1.2,2.0,3.0,-1.0,2.0])
    访问  a[1]
          2.0
    访问  a[2:4],
          array([3.,-1.])
    访问  a[::2]
          array([1.2,3.,2.])
    访问  a[::-1]
          array([2.,-1.,3.,2.,1.2])
    
  2. 多维数组的访问
    设有二维数组A:
          A = np.array([[2.0,-1.0,0.0,0.0,0.0],
                         [-1.0,2.0,-1.0,0.0,0.0],
                         [0.0,-1.0,2.0,-1.0,0.0],
                         [0.0,0.0,-1.0,2.0,-1.0],
                         [0.0,0.0,0.0,-1.0,2.0]
                         ])
    访问 A[2,2]
         2.0                                   # 第3行3列
    访问 A[2]
        array([0.,-1.,2.,-1.,0.])              # 第3行
    访问 A[:3,:3]
        array([[2.,-1.,0.],                   # 前3行3列
               [-1.,2.,-1.],
               [0.,-1,2.]])
    
  3. Numpy数组索引总结
    list的全部索引方式,对于numpy向量、矩阵均可用
  4. Numpy数组的布尔索引
    布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组
    import numpy as np
    data = np.array([[1,2],[3,4],[5,6]])
    print(data>3)                  # 返回bool数组
    print(data[data>3])
    
(3) 数组重塑
  • 矩阵转置data.T
  • 矩阵重塑data.reshape()
    # 使用reshape更改维度
    A = np.array([[2.0,-1.0,0.0,0.0,0.0],
                         [-1.0,2.0,-1.0,0.0,0.0],
                         [0.0,-1.0,2.0,-1.0,0.0],
                         [0.0,0.0,-1.0,2.0,-1.0],
                         [0.0,0.0,0.0,-1.0,2.0]
                         ])
    A.reshape((25,))
    array([2.,-1.,0.,0.,0.,-1.,2.,-1.,0.,
       0.,0.,-1.,2.,-1.,0.,0.,0.,-1.,2.,-1.,
       0.,0.,0.,-1.,2.])
    

4. Numpy运算

(1) 数组运算
  1. Numpy的基本运算
    Python的基本运算符在numpy数组中都能使用
    import numpy as np
    data = np.array([1.2,2.0,3.0,-1.0,2.0])
    print(data * 2)         # 乘
    print(data ** 2)        # 幂
    print(data / 2)         # 除
    print(data //2)        # 整除
    print(data % 2)        # 取模
    
  2. Numpy的函数运算
    基本运算函数:函数可作用于数组内每个元素
基本运算函数#
np.sin(ndarray)sin(x)
np.tan(ndarray)tan(x)
np.exp(ndarray)e^x
np.abs(ndarray)绝对值
np.sign(ndarray)x的正负
np.square(ndarray)x^2
np.sqrt(ndarray)x^0.5

nan(NAN,Nan):not a number 表示不是一个数字,出现在数据有缺失,或者做了不合适的计算(不在函数定义域)的场合

import numpy as np
data = np.array([1.2,2.0,3.0,-1.0])
print(np.sin(data))       # [0.93203909,0.90929743,0.14112001,-0.84147098]
print(np.tan(data))       # [2.57215162,-2.18503986,-0.14254654,-1.55740772]
print(np.exp(data))       # [3.32011692,7.3890561,20.08553692,0.36787944]
print(np.abs(data))       # [1.2,2.,3.,1.]
print(np.sign(data))      # [1.,1.,1.,-1.]
print(np.square(data))    # [1.44,4.,9.,1.]
print(np.sqrt(data))      # [1.09544512,1.41421356,1.73205081,nan]
  1. Numpy向量的聚合
    可使用min、maxsum进行最值、求和统计
    import numpy as np
    data = np.array([1,2,3])
    print(np.min(data))
    print(np.max(data))
    print(np.sum(data))
    
    可使用 mean 得到平均值、prod 得到所有元素乘积、std 得到标准差等
    import numpy as np
    data = np.array([1,2,3])
    print(np.mean(data))     # 求平均值 2.0
    print(np.prod(data))     # 求所有元素乘积  6
    print(np.std(data))      # 求标准差 0.816496580927726
    
  2. 二维数组(矩阵)的聚合
    求矩阵元素的最值、总和等
    import numpy as np
    data = np.array([[1,2],[3,4],[5,6]])
    print(np.max(data))     # 求矩阵元素最大值 6
    print(np.min(data))     # 求矩阵元素最小值 1
    print(np.sum(data))     # 求矩阵元素总和 21
    
    import numpy as np
    data = np.array([[1,2],[5,3],[4,6]])
    print(np.max(data,axis=0))      # 找出每一列最大值
    print(np.max(data,axis=1))      # 找出每一行最大值
    
  3. 数组运算和广播机制
    按位置运算(即对应元素进行加减乘除)
    import numpy as np
    data = np.array([1,2])
    ones = np.array([1,1])
    # 对应元素的加减乘除
    print("data+ones=",data+ones)
    print("data-ones=",data-ones)
    print("data*ones=",data*ones)
    print("data/ones=",data/ones)
    print("data*2=",data*2)
    
    如果两个矩阵大小相同,我们可以使用算术运算符(+ - * /)对矩阵进行加、乘,NumPy将它们视为position-wise运算
    若两个矩阵大小不同,NumPy使用广播规则(broadcasting)执行算术运算,即:
       I data 为3×2的数组,ones_row 为1×2的数组
       II 相加时
    后者被扩充(内容重复填充)为3×2的数组

       III 然后执行position-wise的加法
  4. 数组点乘
    遵循矩阵乘法计算规则:np.dot(A,B)
    import numpy as np
    data = np.np.array([1,2,3])
    powers_of_ten = np.array([1,100,10000])
    print(np.dot(data,powers_of_ten))
    
  5. 矩阵相乘
    遵循矩阵乘法计算规则:A@B,np.matmul(A,B)
    import numpy as np
    data1 = np.array([1,2,3],[4,5,6])
    data2 = np.array([1,2],[3,4],[5,6])
    print(np.matmul(data1,data2))
    
(2) 线性代数
  1. Numpy的线性代数
    numpy.linalg模块可以应用于线性代数,求矩阵的行列式np.linalg.det()
    import numpy as np
    A = np.array([[2.0,-1.0,0.0],
                  [-1.0,2.0,-1.0],
                  [0.0,-1.0,2.0]])
    print(np.linalg.det(A))              # A的行列式 4.0
    
  2. 矩阵求逆
    求矩阵的逆:np.linalg.inv()
    A = np.array([[2.0,-1.0,0.0],
                  [-1.0,2.0,-1.0],
                  [0.0,-1.0,2.0]])
    A_inverse = np.linalg.inv(A)
    print(A_inverse)              # A的逆矩阵
    # output:
    [[0.75,0.5,0.25],
     [0.5,1.,0.5],
     [0.25,0.5,0.75]]
    
  3. 特征值
    求矩阵的特征值:np.linalg.eig()
    A = np.array([[2.0,-1.0,0.0],
                  [-1.0,2.0,-1.0],
                  [0.0,-1.0,2.0]])
    lam,v = np.linalg.eig(A)
    print(lam)                # A的特征值
    print(v)                  # A的特征向量
    # output:
    [3.41421356,2.,0.58578644]
    [[-5.00000000e-01,-7.07106781e-01,5.00000000e-01],
     [7.07106781e-01,4.05405432e-16,7.07106781e-01],
     [-5.00000000e-01,7.07106781e-01,5.00000000e-01]]
    
  4. 线性方程组
    求解线性方程:np.linalg.solve(A,b)
    A = np.array([[2.0,-1.0,0.0],
                  [-1.0,2.0,-1.0],
                  [0.0,-1.0,2.0]])
    b = np.array([2.0,-1.0,3.0])
    x = np.linalg.solve(A,b)              # 求解Ax=b
    print(x)
    # output:
    [1.75,1.5,2.25]
    

四. 科学作图包Matplotlib

1. 什么是Matplotlib

  • Python的绘图库,包含了大量的工具
  • 可以创建各种图形,包括简单的散点图,正弦曲线,甚至是三维图形
  • 在科学计算中,该包常被用于数据可视化

2. Matplotlib作图元素

(1) 数据曲线 (以正弦曲线为例)
import matplotlib.pyplot as plt
import numpy as np
X = np.linspace(0,2*np.pi,50)
Y = np.sin(X)
plt.plot(X,Y)
plt.show()
(2) 在一张图纸里绘制多条曲线
  • 常见的颜色表示方式:
  • ‘b’ 蓝色 ‘g’ 绿色 ‘r’ 红色 ‘y’ 黄色 ‘k’ 黑色 ‘w’ 白色
  • 常见的点的表示方式:
  • ‘.’ 点 ‘,’ 像素 ‘o’ 圆 ‘s’ 方形 ‘^’ 三角形
  • 常见的线的表示方式:
  • ‘-’ 直线 ‘–’ 虚线 ‘:’ 点线 ‘-.’ 点画线
    import matplotlib.pyplot as plt
    import numpy as np
    X = np.linspace(0,2*np.pi,50)
    Y = np.sin(X)
    # y表示黄色,*表示星标的点,-表示实线
    plt.plot(X,Y,'y*-')
    plt.plot(X,Y*2,'m--')
    plt.show()
    
(3)
  • Matplotlib绘制的图形都在一个默认的figure中
  • 可以自己创建figure,能控制图形大小等参数
  • 这里创建一个figure,设置大小为(6,3)
    # 创建一个figure,设置大小为(6,3)
    plt.figure(figsize=(6,3))
    plt.plot(X,Y)
    plt.plot(X,Y*2)
    plt.show()
    
(4) 标题
  • 直接通过 plt.title() 即可设置图形标题
    plt.plot(X,Y)
    plt.plot(X,Y*2)
    plt.title("sin(X) & 2 sin(X)")
    plt.show()
    
(5) 坐标轴
  1. xlim和ylim:设定轴的范围
  2. xlabel和ylabel:设置轴的名称
  3. xticks和yticks:设置轴的刻度
    plt.plot(X,Y)
    plt.plot(X,Y*2)
    plt.xlim((0,np.pi*2))
    plt.ylim((-3,3))
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.xticks((0,np.pi*0.5,np.pi,np.pi*1.5,np.pi*2))            # 给出刻度坐标
    plt.show()
    
(6) 标签(label)和图例(legend)
  • 设置label和legend的目的是区分出每个数据对应的图形名称
    plt.plot(X,Y,label="sin(x)")
    plt.plot(X,Y*2,label="2sin(x)")
    plt.legend(loc="best")                  # 显示label
    plt.show()
    

3. 综合应用案例

(1) 条形图/柱状图
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [3,6,1,8,2]
plt.bar(x,y,
        width=0.3,       # 柱子粗细
        color='r',       # 柱子颜色
        alpha=0.3)       # 不透明度,值越小越透明
plt.xticks(x,['a','b','c','d','e'])
plt.yticks(y)
plt.show()
(2) 散点图
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,50)
y = np.sin(x)
plt.scatter(x,y,
            color='r',          # 点的填充颜色
            marker='o',         # 散点的形状
            edgecolor='k')      # 点的边缘颜色
plt.show()
(3) 散点上色图
import matplotlib.pyplot as plt
import numpy as np
# 生成500个坐标随机的数据点
k = 500
x = np.random.rand(k)
y = np.random.rand(k)
# 随机生成每个点的大小
size = 50 * np.random.rand(k)
# 根据各点坐标(x,y)对应的反正切分配颜色
color = np.arctan2(x,y)
# 画图并添加颜色栏 (colorbar)
plt.scatter(x,y,s=size,c=color)
plt.colorbar()
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值