当前位置: 首页 > news >正文

day19学习numpy库和matplotlib库

文章目录

  • 一、NumPy库
    • 11.数组操作
      • 11.5分割数组
      • 11.6矩阵运算
        • 11.6.1**np.dot**点乘
        • 11.6.2**np.matmul**矩阵乘法
        • 11.6.3 **np.linalg.det**矩阵行列式
    • 12.数组元素的增删改查
      • 12.1 **resize**
      • 12.2 append添加
      • 12.3 insert插入
      • 12.4 delet删除
      • 12.5 argwhere和 where
      • 12.6 argmax
      • 12.7 unique去重
    • 13.统计函数
      • 13.1 amin和amax
      • 13.2 ptp最值之差
      • 13.3median
      • 13.4mean()
      • 13.5 average()加权平均值
      • 13.6 var( )方差
      • 13.7std( )方法
  • 二、Matplotlib库
    • 1.下载
    • 2.常用函数使用
      • 2.1 plot函数
      • 2.2 figure函数
    • 3.处理中文标题乱码
      • 3.1局部修改
      • 3.2修改配置文件

一、NumPy库

11.数组操作

11.5分割数组

函数名称参数说明
hsplit(ary, indices_or_sections)ary:原数组
indices_or_sections:按列分割的索引位置
将一个数组水平分割为多个子数组(按列)
vsplit(ary, indices_or_sections)ary:原数组
indices_or_sections:按行分割的索引位置
将一个数组垂直分割为多个子数组(按行)
  • hsplit水平分割:从左往右 画垂直线分割
  • 示例:
import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 使用 np.hsplit 将数组分割成三个子数组
# 分割点在索引1和2处,这意味着:
# 第一个子数组将包含从第0列到索引1(不包括索引1)的列,即第0列。
# 第二个子数组将包含从索引1(包括索引1)到索引2(不包括索引2)的列,即第1列
# 第三个子数组将包含从索引2(包括索引2)到末尾的列,即第2列
L = np.hsplit(a, [1,2]) # 分为 【0~1列)【1~2) 【2~全部】
print(L[0]) # 输出 [[1] [4] [7]]
print(L[1]) # 输出 [[2] [5] [8]]
print(L[2]) # 输出 [[3] [6] [9]]
  • vsplit垂直分割:从上往下 画水平线分割
  • 示例:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
L = np.vsplit(a, [1, 2])
# 原理同上,划分3个矩阵:【0~1行)【1~2) 【2~全部】
print(L[0]) # 输出 [[1 2 3]]
print(L[1]) # 输出 [[4 5 6]]
print(L[2]) # 输出 [[7 8 9]]

11.6矩阵运算

11.6.1np.dot点乘

是一个通用的点积函数,适用于多种维度的数组。

  • 对于二维数组(矩阵),np.dot 等价于矩阵乘法。
  • 对于一维数组(向量),np.dot 计算的是向量的点积(内积)。
  • 示例:
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
#[1 2]  [5 6]
#[3 4]  [7 8]
result = np.dot(a, b)
print(result) # 输出
#[[19 22]        原理  [[1*5+2*7    1*6+2*8]
# [43 50]]			   [3*5+4*7    3*6+4*8]]
11.6.2np.matmul矩阵乘法

是专门用于矩阵乘法的函数,适用于二维及更高维度的数组

  • 计算:行乘列

  • 示例:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
#[1 2]  [5 6]
#[3 4]  [7 8]
result = np.matmul(a, b)
print(result)
  • 输出 — 与上面dot的计算过程一样
[[19 22]
 [43 50]]
11.6.3 np.linalg.det矩阵行列式

计算一个方阵(行数和列数相等的矩阵)的行列式。

  • 计算:正对角线相乘 - 负对角线相乘

  • 示例:

    import numpy as np
    
    a = np.array([[1, 2], [3, 4]])
    #[ 1 2 ]
    #[ 3 4 ]
    print(np.linalg.det(a))
    # 计算: 1*4 - 2*3
    # 输出 -2.0000000000000004
    
  • 结果不是-2,这是由于浮点数的二进制表示和计算过程中的舍入误差导致的。可以通过四舍五入来近似表示:

    a = np.round(np.linalg.det(a))
    print(a) # 输出 -2.0
    

12.数组元素的增删改查

12.1 resize

变化数组形状,并且不受数组个数影响

  • 修改原理:重复遍历原数组,填充新形状数组

  • 语法:np.resize( arr, (n,m) )

  • 效果:把arr数组转化为 n行 m列的数组

  • 示例:

import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.resize(a, (3,3))
#[1 2]      [1 2 3]
#[3 4]  ->  [4 1 2]
#           [3 4 1]
print(b)
  • 输出:
[[1 2 3]
 [4 1 2]
 [3 4 1]]

12.2 append添加

  • 语法:np.append( arr, value, axis = None)

  • 参数:

  • arr : 数组 ; value : 添加的值

  • axis = None / 0 / 1

    • None :平铺成一维数组末尾追加并返回
    • 0 / 1 :进行 行 或 列 的相加
  • 注意:行相同,才能列相加(axis=1);列相同,才能行相加(axis=0)

  • 示例:

    import numpy as np
    
    a = np.array([[1, 2], [3, 4], [5, 6]])  # 形状(3,2)
    
    value1 = np.array([[8], [9], [0]])  # 形状(3,1)
    # a 和 value1 行相同,才能列相加
    # (3,2) + (3,1) = (3,3)
    b = np.append(a, value1, axis=1)
    
    value2 = np.array([[8, 9]])  # 形状(1,2)
    # a 和 value1 列相同,才能行相加
    # (3,2) + (1,2) = (4,2)
    c = np.append(a, value2, axis=0)
    print(b)
    print(c)
    
  • 输出:

    [[1 2 8]
     [3 4 9]
     [5 6 0]]
    [[1 2]
     [3 4]
     [5 6]
     [8 9]]
    

12.3 insert插入

  • 语法:np.insert ( arr, value, axis = None)
  • 参数:
  • arr : 数组 obj:插入的位置 value : 添加的值
  • axis = None / 0 / 1
    • None :平铺成一维数组末尾追加并返回
    • 0 / 1 :进行 行 或 列 的插入
  • 注意:进行a维度的插入时,其他维度的大小要相同才可
  • 示例:
import numpy as np

a = np.arange(8).reshape(2,4)
#[0 1 2 3]
#[4 5 6 7]

# 插入行数据  此时 a的形状 (2,4)  
insert_h1 = np.insert(a,2,[8,9,10,11],axis=0)
# 第三行插入 [8,9,10,11]
print(insert_h1)
# 输出
#[[ 0  1  2  3]
# [ 4  5  6  7]
# [ 8  9 10 11]]

# 插入列数据  此时 a的形状 (2,4)  
# 在第2列插入 全0   等价于插入 [0,0]
insert_v1 = np.insert(a,2,0,axis=1)
print(insert_v1)
# 输出
#[[0 1 0 2 3]
# [4 5 0 6 7]]

12.4 delet删除

  • 语法:np.delete( arr, value, axis = None)
  • 参数:
  • arr : 数组 ; value : 删除的索引
  • axis = None / 0 / 1
    • None :平铺成一维数组末尾删除并返回
    • 0 / 1 :删除 行 或 列
  • 示例:
# 一维数组
import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

# 删除索引为 2 和 4 的元素
new_arr = np.delete(arr, [2, 4])
print(new_arr) # [1 2 4 6]
# 二维数组
import numpy as np

a = np.arange(6).reshape(2,3)
#[0 1 2]
#[3 4 5]
# 删除第1行
delet_h = np.delete(a, 0, axis=0)
print(delet_h) # 输出 [[3 4 5]]

# 删除第列行
delet_v = np.delete(a, 0, axis=1)
print(delet_v) # 输出 [[1 2] [4 5]]

12.5 argwhere和 where

  • 相同点:

    • 都可以返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标
    • 可以传布尔表达式,返回true的下标索引
  • 不同点:

    • 前者返回一个列表,列表中装了每一个点的索引[a b]
    • 后者返回一个元组b,里面装两个数组,分别装行和列的索引
      • 好处:arr = a[ b[0], b[1] ] 高级索引获取所有值
  • 示例:

import numpy as np

a = np.arange(6).reshape(2,3)
print(a)
print(np.argwhere(a))
print("大于4的索引:", np.argwhere(a > 4))
  • 输出
[[0 1 2]
 [3 4 5]]

[[0 1]  # 1
 [0 2]  # 2
 [1 0]  # 3
 [1 1]  # 4
 [1 2]] # 5
大于4的索引: [[1 2]] # 5

12.6 argmax

获取列表中最大值的下标索引

  • 示例:
import numpy as np

a = np.arange(6).reshape(2,3)
print(np.argmax(a))
# 输出  5  # 这里最大值5的索引是5

12.7 unique去重

函数名称参数说明
unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)ar:输入的数组
return_index:如果为 True,则返回新数组元素在原数组中的位置(索引)
return_inverse:如果为 True,则返回原数组元素在新数组中的位置(逆索引)
return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数
删掉某个轴上的子数组,并返回删除后的新数组
  • axis = 0 / 1 去除重复的 行 或 列

  • 示例:

    import numpy as np
    arr = np.array([[1, 2], [2, 3], [1, 2]])
    # 去除重复的行
    print(np.unique(arr,axis=0))
    # 输出
    #[[1 2]
    # [2 3]]
    

13.统计函数

13.1 amin和amax

  • 作用:查找最大和最小值
  • 语法:np.amin( arr, axis=0 / 1 )
    • axis=0 : 就是每一列返回一个最大值**(比较每一列中最大的行)**
    • axis=1 : 就是每一行返回一个最大值**(比较每一行中最大的列)**
  • 示例:
import numpy as np
arr = np.array([[1,23,4,5,6],[1,2,333,4,5]])
#[1 23  4  5 6]
#[1 2  333 4 5]

# 最小的行
print(np.amin(arr,axis=0)) # 输出[1 2 4 4 5]

# 最大的列
print(np.amax(arr,axis=1)) # 输出[23 333]

13.2 ptp最值之差

  • 计算数组元素中最值之差,即最大值 - 最小值

  • axis = 0:每一列返回一个值(每一列的最大行和最小行相减)

  • axis = 1:每一行返回一个值(每一行的最大列和最小列相减)

  • 示例:

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
#[1 2 3]
#[4 5 6]
#[7 8 9]
print(np.ptp(arr,axis=0)) # 输出:[6 6 6]
# 原理:[7-1 8-2 9-3]
print(np.ptp(arr,axis=1)) # 输出:[2 2 2]
# 原理:[3-1 6-4 9-7]

13.3median

计算中位数,中位数是指将数组中的数据按从小到大的顺序排列后,位于中间位置的值。如果数组的长度是偶数,则中位数是中间两个数的平均值。

  • axis=0 : 返回每一行的中位数 ,列同理
arr = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 np.median 计算中位数
median_value = np.median(arr,axis=0)

print(median_value)
# 输出:
# [2. 5.]

13.4mean()

沿指定的轴,计算数组中元素的算术平均值(即元素之总和除以元素数量)

arr = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 np.mean 计算平均值
mean_value = np.mean(arr)

print(mean_value)
# 输出:
# 3.5


# 使用 np.mean 按行计算平均值
mean_values_row = np.mean(arr, axis=1)

# 使用 np.mean 按列计算平均值
mean_values_col = np.mean(arr, axis=0)

print(mean_values_row)
# 输出:
# [2. 5.]

print(mean_values_col)
# 输出:
# [2.5 3.5 4.5]

13.5 average()加权平均值

加权平均值是将数组中各数值乘以相应的权数,然后再对权重值求总和,最后以权重的总和除以总的单位数(即因子个数);根据在数组中给出的权重,计算数组元素的加权平均值。该函数可以接受一个轴参数 axis,如果未指定,则数组被展开为一维数组。
加权平均值 = ∑ i = 1 n ( x i ⋅ w i ) ∑ i = 1 n w i 加权平均值=\dfrac{∑_{i=1}^n(x_i⋅w_i)}{∑_{i=1}^nw_i} 加权平均值=i=1nwii=1n(xiwi)
其中 xi是数组中的元素,wi是对应的权重。

如果所有元素的权重之和等于1,则表示为数学中的期望值。

# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])

# 创建权重数组
weights = np.array([0.1, 0.2, 0.3, 0.2, 0.2])

# 使用 np.average 计算加权平均值
average_value = np.average(arr, weights=weights)

print(average_value)
# 输出:
# 3.2

13.6 var( )方差

np.var 函数默认计算的是总体方差(Population Variance),而不是样本方差(Sample Variance)。

总体方差:

对于一个总体数据集 X={x1,x2,…,xN},总体方差的计算公式为:
σ 2 = 1 N ∑ i = 1 N ( x i − μ ) 2 σ^2=\dfrac{1}{N}∑_{i=1}^N(x_i−μ)^2 σ2=N1i=1N(xiμ)2
其中:

  • N是总体数据点的总数。
  • μ是总体的均值。
# 创建一个数组
arr = np.array([1, 2, 3, 4, 5])
# 计算方差
variance = np.var(arr)
# 使用样本方差计算
# variance = np.var(arr, ddof=1)
print(variance)
#输出:2

样本方差:

对于一个样本数据集 X={x1,x2,…,xn},样本方差 的计算公式为:
s 2 = 1 n − 1 ∑ i = 1 n ( x i − x ‾ ) 2 s^2=\dfrac{1}{n−1}∑_{i=1}^n(x_i−\overline x)^2 s2=n11i=1n(xix)2

13.7std( )方法

标准差是方差的算术平方根,用来描述一组数据平均值的分散程度。若一组数据的标准差较大,说明大部分的数值和其平均值之间差异较大;若标准差较小,则代表这组数值比较接近平均值

# 创建一个数组
arr = np.array([1, 2, 3, 4, 5])
 
# 计算标准差 = 方差开根号
std_dev = np.std(arr)

print(std_dev)
# 输出:1.4142135623730951

二、Matplotlib库

1.下载

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.常用函数使用

2.1 plot函数

import numpy as np
import matplotlib.pyplot as plt
def test01():
    # 生产数据
    x = np.linspace(-6, 6, 100)
    # 定义函数
    y1 = np.sin(x)
    y2 = np.cos(x)
    # 绘制折线图
    plt.plot(x, y1, 'b')
    plt.plot(x, y2, 'g')
    # 显示图
    plt.show()
test01()
  • 画图如下:
    在这里插入图片描述

2.2 figure函数

def test02():
    x = np.linspace(-6, 6, 100)
    # 定义函数
    y1 = x ** 2
    # 创建画布  -设置大小
    fig = plt.figure(figsize=(8, 6))
    # 创建绘图区域
    ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
    # 绘制折线图
    ax.plot(x, y1, 'b', label='y=x^2')
    # 加载图例(图片左下角的图标)
    ax.legend()
    plt.show()
  • 输出图在这里插入图片描述

3.处理中文标题乱码

3.1局部修改

添加如下代码即可

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

3.2修改配置文件

执行如下代码,找到配置文件matplotlibrc

import matplotlib
print(matplotlib.matplotlib_fname())

修改1:

在这里插入图片描述

修改2:
在这里插入图片描述

修改3:

4.subplot 和 subplots 函数

  • 共同的:都是为了在一个画布上,划分多个区域,分别画图

  • 不同点:前者是每次画之前调用fig.add_subplot(1,2,1);后者是一次划分好区域,返回一个列表,并且自己就可以创建好画布

  • subplot 示例:

x = np.linspace(-6, 6, 100)
# 定义函数
y1 = x ** 2
y2 = np.tan(x)
# ------------从这里开始不一样--------------------
# 创建画布  -设置大小
fig = plt.figure(figsize=(8, 6))
# 创建绘图区域
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])

# 分区------subplot 方法---------
# 在每次plot画图之前,设置画在哪
# 1 行 2 列  的 第1个位置
ax = fig.add_subplot(1,2,1)
# 绘制折线图
ax.plot(x, y1, 'b', label='y=x**2')

# 分区------subplot 方法-----------
ax = fig.add_subplot(1,2,2)
ax.plot(x, y2, 'g', label='y=tan(x)')
# 加载标签
ax.legend()
#---------------上面不一样------------
plt.show()
  • subplots 示例
x = np.linspace(-6, 6, 100)
# 定义函数
y1 = x ** 2
y2 = np.tan(x)


# 创建图形和子图
fig, axs = plt.subplots(1, 2, figsize=(8, 6))
# 图形1
axs[0].plot(x, y1, label='y=x**2')
axs[0].legend()
# 图形2
axs[1].plot(x, y2, label='y=tan(x)')
axs[1].legend()

plt.show()


  • 输出一样的图片:
    两个函数的结果图相同
http://www.dtcms.com/a/98700.html

相关文章:

  • 使用postcss-px-to-viewport-8-plugin将页面转响应式
  • git | 版本切换的相关指令
  • Qt Creator 中文 “error: C2001: 常量中有换行符“ 问题解决方法
  • 树的基础_遍历(蓝桥云课)
  • Qt之Service开发
  • 复盘与导出工具最新版V20.0版本更新--覆盖标记新增龙头标记---连板标记--普通标记3种选择
  • 深度学习4.4笔记
  • 游戏AI实现-GOAP
  • 【华为OD技术面试真题 - 技术面】- Java面试题(16)
  • 【免费】中国电子学会2025年03月份青少年软件编程Python等级考试试卷六级真题(含答案)
  • 解决obsidian无法加载社区的解决的尝试
  • DeepSeek-R1国产大模型实战:从私有化部署到内网穿透远程使用全攻略
  • 【Java】Java核心知识点与相应面试技巧(七)——类与对象(二)
  • c++游戏开发第一期
  • 【大模型基础_毛玉仁】5.3 附加参数法:T-Patcher
  • 《新凯来 :中国半导体设备制造行业从“跟随者”向“挑战者”的角色转变》
  • 【蓝桥杯速成】| 15.完全背包
  • docker pull lss233/one-api:latest 在哪里运行,作用是什么
  • 【VUE】day08黑马头条小项目
  • (三)点亮LED
  • ngx_http_core_merge_srv_conf
  • 外观模式(Facade Pattern):复杂系统的“统一入口”
  • Qwen-0.5b linux部署
  • 订单超时自动关闭:电商系统的技术难题与解决方案
  • 常用登录Linux系统的方法以及操作指南
  • Spring Cloud Gateway详细介绍简单案例
  • Js 主线程和异步队列哪个先执行
  • Yolo系列之Yolov4的改进及网络框架
  • Java入门知识总结——章节(二)
  • bluecode-20240913_1_数据解码