第 14 章python学习知识记录(一)

news2024/11/15 18:43:37

文章目录

  • 前言
  • 14.1 numpy的使用
    • 14.1.1 数字运算
    • 14.1.2 N维数组
    • 14.1.3 矩阵运算与广播
    • 14.1.4 元素访问
  • 14.2 Matplotlib的使用
    • 14.2.1 绘制简单图形
    • 14.2.2 绘制复杂图形
    • 14.2.3 显示图片
  • 14.3 os函数
    • 14.3.1 获取文件路径
    • 14.3.2 路径的基本操作
  • 14.4 tqdm的使用
    • 14.4.1 tqdm的导入和使用
    • 14.4.2 带有参数的`tqdm.tqdm()`
      • 例1
      • 例2
    • 14.4.3 自定义进度条显示信息
    • 14.4.4 tqdm内置生成可迭代对象方法
    • 14.4.5 自定义方法更新进度
  • 总结


前言

主要记录在python学习过程中遇到的一些问题。

14.1 numpy的使用

numpy包是人工智能算法的基础,本节简要介绍一下其包的使用。

14.1.1 数字运算

代码:

import numpy as np
## 生成数组
x = np.array([1.0, 2.0, 3.0])
print(x)
type(x)

## 算术运算
x = np.array([1.0, 2.0, 3.0])
y = np.array([5.0, 2.0, 3.0])
plus = x+y
print("plus", plus, "\n")

minus= x-y
print("minus", minus, "\n")

multiply = x*y
print("multiply", multiply, "\n")

devide = x/y
print("devide", devide, "\n")

输出

[1. 2. 3.]
plus [6. 4. 6.]

minus [-4. 0. 0.]

multiply [5. 4. 9.]

devide [0.2 1. 1. ]

14.1.2 N维数组

代码:

import numpy as np
A = np.array([[1, 2], [3, 4]])
print(A)
print(A.shape)
print(A.dtype)

输出

[[1 2]
[3 4]]
(2, 2)
int32

14.1.3 矩阵运算与广播

代码:

import numpy as np
##  矩阵运算
A = np.array([[1, 2], [3, 4]])
B = np.array([[3, 0],[0, 6]])
print("A+B", A+B, "\n")
print("A-B", A+B, "\n")
print("A*B", A*B, "\n")
print("A*10", A*10, "\n")
##  广播
# 不同维数的数组相乘
A = np.array([[1, 2], [3, 4]])
B = np.array([10, 20])
print("A*B,广播", A*B, "\n")

输出

A+B [[ 4 2]
[ 3 10]]

A-B [[ 4 2]
[ 3 10]]

AB [[ 3 0]
[ 0 24]]

A
10 [[10 20]
[30 40]]

A*B,广播 [[10 40]
[30 80]]

14.1.4 元素访问

代码:

import numpy as np
# 元素的索引从0开始
X = np.array([[51, 55], [14, 19], [0, 4]])
print(X)
print("X[0]", X[0]) # 第0行
print("X[0][1]", X[0][1]) # (0,1)的元素

# 用for语句访问元素
X = np.array([[51, 55], [14, 19], [0, 4]])
for row in X:
    print(row)

# 使用数组访问元素
X = np.array([[51, 55], [14, 19], [0, 4]])
X = X.flatten()
print("X[np.array([0, 2, 4])]", X[np.array([0, 2, 4])])# 获取索引为0、2、4的元素
print(X)

# 获取满足一定条件的元素
X = np.array([[51, 55], [14, 19], [0, 4]])
X = X.flatten()
print("X > 15", X > 15)
print("X[X>15]", X[X>15])

输出

[[51 55]
[14 19]
[ 0 4]]
X[0] [51 55]
X[0][1] 55
[51 55]
[14 19]
[0 4]
X[np.array([0, 2, 4])] [51 14 0]
[51 55 14 19 0 4]
X > 15 [ True True False True False False]
X[X>15] [51 55 19]

14.2 Matplotlib的使用

Matplotlib为python的一个包,可用于一些图形的绘制,具体实例如下。

14.2.1 绘制简单图形

代码:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
y = np.sin(x)

# 绘制图形
plt.plot(x, y)
plt.show()

输出

前驱

14.2.2 绘制复杂图形

代码:

import matplotlib.pyplot as plt
# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制图形
plt.plot(x, y1, label="sin")# sin系列标签
plt.plot(x, y2, linestyle = "--", label="cos") # 用虚线绘制,cos系列标签
plt.xlabel("x") # x轴标签
plt.ylabel("y") # y轴标签
plt.title('sin & cos') # 标题
plt.legend()#  显示系列标签
plt.show()

输出

请添加图片描述

14.2.3 显示图片

代码:

from matplotlib.image import imread
img = imread('字符串驻留.PNG') # 读入图像(设定合适的路径!)
plt.imshow(img)
plt.show()

输出:

请添加图片描述

14.3 os函数

os用于操作文件目录,本节将对其操作进行一个简要介绍。

14.3.1 获取文件路径

导入os.path函数后进行相关的操作。
文件组成

在这里插入图片描述

代码:

import os.path
print(os.path.abspath('document_try/neu.jpg'))#获取文件的绝对路径
print(os.path.exists('document_try/neu.jpg'))#判断文件目录是否存在,存在返回True,不存在返回False
print(os.path.abspath('document_try/兰州交通大学.PNG'))#获取文件的绝对路径
print(os.path.exists('document_try/兰州交通大学.PNG'))#判断文件目录是否存在,存在返回True,不存在返回False

输出:

D:\document\document\major_study\Natural Language Processing\自然语言处理:基于预训练模型的方法(实践与笔记)\chp4\13文件练习\bneu.jpg
False
D:\document\document\major_study\Natural Language Processing\自然语言处理:基于预训练模型的方法(实践与笔记)\chp4\document_try\兰州交通大学.PNG
True

14.3.2 路径的基本操作

导入os.path函数后进行相关的操作,不改变实际文件路径的关系,只是在给定的路径字符串中进行相关操作。

import os.path
print(os.path.join('document_try','document_try2'))#将目录与目录或文件名拼接起来
print(os.path.split('\document_try\兰州交通大学.PNG'))#分离目录名与文件名
print(os.path.splitext('document_try/兰州交通大学.PNG'))#分离文件名与扩展名
print(os.path.basename('D:\document\document\major_study\python 学习/13文件练习/bneu.jpg'))#从一个目录中提取文件名
print(os.path.dirname('D:\document\document\major_study\python 学习/13文件练习/bneu.jpg'))#从一个路径中提取文件路径,不包含文件名
print(os.path.isdir('D:\document\document\major_study\python 学习/13文件练习/bneu.jpg'))#判断是否为路径

输出:

document_try\document_try2
(‘\document_try’, ‘兰州交通大学.PNG’)
(‘document_try/兰州交通大学’, ‘.PNG’)
bneu.jpg
D:\document\document\major_study\python 学习/13文件练习
False


14.4 tqdm的使用

参考资料:tqdm的使用和例子

作用: 在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。

优点:tqdm就能非常完美的支持和解决这些问题,可以实时输出处理进度而且占用的CPU资源非常少,支持windows、Linux、mac等系统,支持①循环处理、②多进程、③递归处理、还可以结合Linux的命令来查看处理情况,等进度展示。

14.4.1 tqdm的导入和使用

可以通过import导入tqdm包,有如下2种所示的代码导入方式,建议使用方法1,因为方法1导入的是一个lib,而方法2导入的是tqdm.tqdm方法,使用方法2导入就没办法使用tqdm.trange()等其他方法了。
对于可以迭代的对象都可以使用tqdm进行封装实现可视化进度,使用如下文代码所示。
代码

# 导入包
import tqdm # 方法1
# from tqdm import tqdm # 方法2
import time

# 定义一个可迭代对象
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 正常的遍历(没有进度条)
for idx, element in enumerate(a):
    print(f"No.{idx}: {element}")

# 使用tqdm对可迭代对象进行包装,实现进度条可视化
for idx, element in enumerate(tqdm.tqdm(a)):
    time.sleep(0.5)
    print(f"No.{idx}: {element}")

输出

No.0: 1
No.1: 2
No.2: 3
No.3: 4
No.4: 5
No.5: 6
No.6: 7
No.7: 8
No.8: 9
No.9: 10
10%|█ | 1/10 [00:01<00:09, 1.01s/it]No.0: 1
No.1: 2
30%|███ | 3/10 [00:03<00:07, 1.01s/it]No.2: 3
No.3: 4
50%|█████ | 5/10 [00:05<00:05, 1.01s/it]No.4: 5
60%|██████ | 6/10 [00:06<00:04, 1.01s/it]No.5: 6
No.6: 7
80%|████████ | 8/10 [00:08<00:02, 1.01s/it]No.7: 8
No.8: 9
100%|██████████| 10/10 [00:10<00:00, 1.01s/it]
No.9: 10

可以看出输出进度条会不停地输出一行,直至输出所有结果,这是因为每次的print内容都不一样,为了能够显示新的内容,所以会这样。下文所示程序因为没有控制台输出,所以进度条就只有一条。
代码

# 定义一个可迭代对象
a = [1, 4, 7, 2, 5, 8, 3, 6, 9, 10]
# 使用tqdm对可迭代对象进行包装,实现进度条可视化
for idx, element in enumerate(tqdm.tqdm(a)):
    time.sleep(0.5)

输出:

在这里插入图片描述

14.4.2 带有参数的tqdm.tqdm()

在进度条中加一些属于自己的信息。

@staticmethod
def format_meter(n, total, elapsed, ncols=None, prefix='', ascii=False, unit='it',
                 unit_scale=False, rate=None, bar_format=None, postfix=None,
                 unit_divisor=1000, initial=0, colour=None, **extra_kwargs):
  • iterable: 可迭代的对象, 在⼿动更新时不需要进⾏设置
  • desc: 字符串, 左边进度条描述⽂字
  • total: 总的项⽬数
  • leave: bool值, 迭代完成后是否保留进度条
  • file: 输出指向位置, 默认是终端, ⼀般不需要设置
  • ncols: 调整进度条宽度, 默认是根据环境⾃动调节长度, 如果设置为0, 就没有进度条, 只有输出的信息
  • unit: 描述处理项⽬单位的⽂字, 默认是it, 例如: 100 it/s, 处理照⽚的话设置为img ,则为 100 img/s
  • unit_scale: ⾃动根据国际标准进⾏项⽬处理速度单位的换算, 例如 100000 it/s >> 100k it/s
  • colour: 进度条颜色

例1

代码:

import tqdm
import time
d = {'测试集比例':0.1,'训练集比例':0.8}

"""desc设置名称
    ncols设置进度条长度 -> 建议设置在100以内
    postfix以字典形式传入详细信息
"""
for i in tqdm.tqdm(range(50),desc='训练过程进度',ncols=100,postfix=d):
    time.sleep(0.1)

输出:

在这里插入图片描述


例2

代码:

import tqdm
import time
d = {'测试集比例':0.1,'训练集比例':0.8}

"""desc设置名称
    ncols设置进度条长度 -> 建议设置在100以内
    postfix以字典形式传入详细信息
"""
for i in tqdm.tqdm(range(50),desc='训练过程进度',ncols=100,postfix=d):
    time.sleep(0.1)

输出:

在这里插入图片描述

14.4.3 自定义进度条显示信息

在进度条中动态输出一些信息,可以使用set_description(),set_postfix()方法,set_description()在进度条之前显示,set_postfix()在进度条之后显示。
代码:

import tqdm
import time
import random

# 在使用set_description时一般会创建一个tqdm.tqdm()对象
pbar = tqdm.tqdm(["a", "b", "c", "d", "e", "f", "g"])
for idx, element in enumerate(pbar):
    time.sleep(0.2)
    pbar.set_description(f"No.{idx}: {element}")


# 在使用set_description()和set_postfix()时一般会创建一个tqdm.tqdm()对象
epochs = 150
pbar = tqdm.tqdm(range(epochs), ncols=100)  # ncols设置进度条显示的字符长度,小了就显示不全了
for idx, element in enumerate(pbar):
    time.sleep(0.01)
    pbar.set_description(f"Epoch {idx}/{epochs}")
    pbar.set_postfix({"class": element}, loss=random.random(), cost_time = random.randrange(0, 100))

输出:

在这里插入图片描述



set_descriptionset_postfix都用的kwargs传参,所以我们可以:

  1. 用字典传参 -> pbar.set_postfix({"key_1": "value_1", ...})
  2. 直接用关键字传参 -> pbar.set_postfix(key_1 = value_1, key_2 = value_2, ...)
  3. 混着用 -> pbar.set_postfix({"key_1": value_1, "key_2": value_2, ...}, key_3 = value_3, ...)

14.4.4 tqdm内置生成可迭代对象方法

除了tqdm.tqdm(range(xxx))这样的写法外,tqdm也提供了类似的方法,即tqdm.trange(xxx)代码如下:

import tqdm
import time
pbar = tqdm.trange(200, 400, 2)
for idx, element in enumerate(pbar):
    time.sleep(0.1)
    pbar.set_description(f"No.{idx} -> {element}")

输出

在这里插入图片描述

14.4.5 自定义方法更新进度

有时候我们不仅仅是通过一个for训练来更新进度条,我们也希望在做完某些操作后更新一次进度条,代码如下:

import tqdm
import time
with tqdm.tqdm(total=10) as bar:  # total为进度条总的迭代次数
    # 操作1
    time.sleep(1)
    # 更新进度条
    bar.update(3)  # bar.update()里面的数表示更新的次数,和optimizer.step方法类似
    # 操作2
    time.sleep(3)
    # 更新进度条
    bar.update(1)
    # 操作3
    time.sleep(1)
    # 更新进度条
    bar.update(6)  # 建议不要超过total

输出

在这里插入图片描述

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker搭建hadoop和hive集群

一、安装docker并生成相关的镜像&#xff08;1&#xff09;安装docker安装docker教程https://www.runoob.com/docker/centos-docker-install.html只要在终端输入&#xff1a;sudo docker run hello-world后出现如下图的内容就证明安装docker成功了&#xff08;2&#xff09;拉取…

让HTTPS、SSH 共享端口的——工具SSLH

目录 安装 SSLH 配置 Apache 或 Nginx Web 服务器 配置 SSLH 测试 安装 SSLH sudo apt-get install sslh 配置 Apache 或 Nginx Web 服务器 编辑 Web 服务器&#xff08;nginx 或 apache&#xff09;配置文件并找到以下行&#xff1a; listen 443 ssl; 将其修改为&…

Uni-App 如何实现消息推送功能?

原文链接&#xff1a;Uni-App 如何实现消息推送功能&#xff1f; 前言 这里用的是uni-app自带的UniPush1.0&#xff08;个推服务&#xff09;&#xff0c;所以只针对UniPush1.0介绍实现步骤。 建议查阅的文章&#xff1a; UniPush 1.0 使用指南Unipush 常见问题 当然现在已…

Flink day01

Flink简介 Flink起源于Stratosphere项目&#xff0c;Stratosphere是在2010~2014年由3所地处柏林的大学和欧洲的一些其他的大学共同进行的研究项目&#xff0c;2014年4月Stratosphere的代码被复制并捐赠给了Apache软件基金会&#xff0c;参加这个孵化项目的初始成员是Stratosphe…

Flutter项目实战

1.Androidstudio 获取dart支持才会出现 下图&#xff0c;才可以单独运行 2.需要 flutter pub get 3.Android Studio 中使用 FlutterJsonBeanFactory 插件 注意点&#xff1a;需要保证该 Android Studio 窗口下是一个完整的Flutter项目&#xff08;窗口下有且仅有一个Flutter项目…

录音软件哪个好用?推荐3款亲测好用的录音软件

很多小伙伴不知道电脑如何录制声音&#xff1f;其实电脑录制声音很简单&#xff0c;借助一款好用录音软件&#xff0c;就可以轻松录制。那你知道录音软件哪个好用吗&#xff1f;小编平常的工作经常需要使用到录音软件。今天就给大家推荐3款亲测好用的录音软件&#xff0c;感兴趣…

k8s核心资源Service

1、介绍为一组pod&#xff08;一次部署&#xff09;统一暴露一个ip和端口&#xff0c;供外界访问。2、集群内对外统一暴露kubectl expose deploy <部署名> --port<对外暴露端口> --target-port<容器内部端口>kubectl expose deploy mynginx --port8000 --tar…

torch_geometric--Convolutional Layers

torch_geometric–Convolutional Layers 卷积层 MessagePassing 式中口口口表示可微的排列不变函数&#xff0c;例如: sum, mean, min, max 或者 mul 和 γΘ\gamma_{\Theta}γΘ​和ϕΘ\phi_{\Theta}ϕΘ​表示可微函数&#xff0c;例如 MLPs. 请参见这里的附带教程。 参数…

JDBC-BasicDAO

引入 之前的sql语句是固定的只能通过参数传入&#xff0c;要写那么多方法肯定不好弄 这就引出了DAO 这里是整个流程示意图 最下面开始说 就是mysql库的每一张表对应一个JavaBean 右边是我们获取和关闭连接的工具类 上面XXXDAO的意思是 每一个表&#xff0c;都有一个与之对应的D…

高压放大器在镓基液态金属微型马达驱动实验研究中的应用

实验名称&#xff1a;高压放大器在镓基液态金属微型马达驱动实验研究中的应用 研究方向&#xff1a;新型材料 测试目的&#xff1a; 微/纳马达虽然是一种以实际应用为基础的动力装置&#xff0c;但其在科学研究方面的价值也尤为重要。在微/纳米尺度下&#xff0c;它可以接受能量…

【测试如何学代码?】学习代码的最佳实践经验分享

为什么要写这篇&#xff1f; 经常在群里看到大家问&#xff1a;该选择哪门语言&#xff1f;哪门语言有钱途&#xff1f; 其实&#xff0c;不管哪门语言&#xff0c;只要深入学好了都不会差&#xff0c;当然&#xff0c;我们选择语言最好还是要和自己的技术方向及职业发展相匹配…

基于php的高校社团信息管理系统

摘 要社团是由高校用户依据兴趣爱好自愿组成&#xff0c;按照章程自主开展活动的用户组织。高校社团是实施素质教育的重要途径和有效方式&#xff0c;在加强校园文化建设、提高用户综合素质、引导用户适应社会、促进用户交流等方面发挥着重要作用&#xff0c;是新形势下有效凝聚…

Android studio:Could not find method compile() for arguments 问题解决及两种解决方法探讨延伸

Could not find method compile() for arguments 问题全称 Could not find method compile() for arguments [org.tensorflow:tensorflow-lite:] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. 如图 解决方法1(简单) …

[数据结构基础]排序算法第四弹 -- 归并排序和计数排序

目录 一. 归并排序 1.1 归并排序的实现思想 1.2 归并排序的递归实现 1.2.1 归并排序递归实现的思想 1.2.2 归并排序递归实现的代码 1.3 归并排序的非递归实现 1.3.1 归并排序非递归实现的思想 1.3.2 归并排序非递归实现的代码 1.4 归并排序的时间复杂度分析 二. 计数排…

c++之模板【进阶版】

前言 对于泛型编程&#xff0c;学好模板这节内容是非常有必要的。在前面学习的STL中&#xff0c;由于模板的可重性和扩展性&#xff0c;几乎所有的代码都采用了模板类和模板函数的方式&#xff0c;这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。 模板初阶 …

Hugging face教程-使用速查表-快速入门

Hugging face笔记 course url&#xff1a;https://huggingface.co/course/chapter5/8?fwpt 函数详细情况&#xff1a;https://huggingface.co/docs/transformers/main_classes/pipelines#transformers.TokenClassificationPipeline 基础掌握transformers和datasets&#xf…

软件测试 利器 | AppCrawler 自动遍历测试工具实践(一)

本文为霍格沃兹测试学院学院学员课程学习笔记&#xff0c;系统学习交流文末加群。 AppCrawler 是由霍格沃兹测试学院校长思寒开源的一个项目,通过名字我们大概也能猜出个方向&#xff0c;Crawler 是爬虫的意思&#xff0c;App 的爬虫&#xff0c;遍历 App &#xff1a; 官方 G…

linux性能优化-中断

一、概念 中断其实是一种异步的事件处理机制&#xff0c;可以提高系统的并发处理能力。Linux将中断处理过程分成了两个阶段&#xff1a;上半部和下半部 &#xff08;1&#xff09;上半部用来快速处理中断&#xff0c;它在中断禁止模式下运行&#xff0c;主要处理跟硬件紧密相关…

云计算是什么

&#x1f4d2;博客主页&#xff1a; 微笑的段嘉许博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f4c6;51CTO首发时间&#xff1a;&#x1f334;2023年2月1日&#x1f334; ✉…

gcc 简介

一、gcc简介gcc与g&#xff0c;当程序中出现using namespace std等带有c特性的语句时&#xff0c;如果用gcc编译时&#xff0c;必须显式地指明这个程序要用c编译库编译&#xff0c;而g可以直接编译。二、gcc支持的文件.c&#xff0c;c语言的源程序.C, c的源程序.cc&#xff0c;…