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

程序代码篇---Numpyassert迭代器


文章目录

  • 前言
  • 第一部分:Numpy
    • 1. 创建数组
    • 2. 数组索引和切片
    • 3. 数组形状操作
    • 4. 数组运算
    • 5. 数学函数
    • 6. 随机数生成
    • 7. 数组排序
  • 第二部分:assert
    • 基本语法
      • 1.condition
      • 2.error_message
    • 示例
    • 注意事项
    • 断言的用途
  • 第三部分:迭代器
    • 迭代器协议
      • 1.__iter__()
      • 2.__next__()
    • 迭代器的特点
      • 1.惰性求值
      • 2.一次性
      • 3.内存效率
    • 创建迭代器
    • 使用迭代器
    • 迭代器和可迭代对象
    • 可迭代对象
      • 1.内置序列类型
      • 2.集合类型
      • 3.生成器
      • 4.文件对象
      • 5.自定义迭代器
      • 6.其他内置迭代器
      • 7.迭代器工具
  • 总结


前言

以上就是今天要讲的内容,本文简单介绍了Numpy、assert、迭代器。


第一部分:Numpy

在深度学习中,Numpy是一个非常重要的库,因为它提供了强大的多维数组对象和一系列用于处理这些数组的数学函数。以下是深度学习中Numpy的一些常用操作及其示例:

1. 创建数组

import numpy as np#创建一维数组
a = np.array([1, 2, 3, 4, 5])#创建二维数组(矩阵)
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])#创建一个全零数组
c = np.zeros((3, 4))#创建一个全一数组
d = np.ones((2, 3))#创建一个单位矩阵
e = np.eye(3)

2. 数组索引和切片

#一维数组索引
print(a[2])  # 输出: 3#二维数组索引
print(b[1, 2])  # 输出: 6#切片操作
print(a[1:4])  # 输出: array([2, 3, 4])#二维数组切片
print(b[0:2, 1:3])  # 输出: array([[2, 3], [5, 6]])

3. 数组形状操作

#获取数组形状
print(b.shape)  # 输出: (3, 3)#改变数组形状
f = np.reshape(a, (5, 1))
print(f.shape)  # 输出: (5, 1)#展平数组
g = np.ravel(b)
print(g)  # 输出: [1 2 3 4 5 6 7 8 9]

4. 数组运算

#向量加法
print(a + np.array([1, 1, 1, 1, 1]))  # 输出: array([2, 3, 4, 5, 6])#矩阵乘法
print(np.dot(b, e))  # 输出: array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])#广播机制
print(a * 2)  # 输出: array([ 2,  4,  6,  8, 10])

5. 数学函数

#计算数组元素的最大值、最小值、平均值
print(np.max(a))  # 输出: 5
print(np.min(a))  # 输出: 1
print(np.mean(a))  # 输出: 3.0#计算标准差
print(np.std(a))  # 输出: 1.4142135623730951

6. 随机数生成

#生成随机数
random_array = np.random.rand(3, 3)
print(random_array)#从正态分布中抽取样本
normal_array = np.random.randn(3, 3)
print(normal_array)

7. 数组排序

#排序数组
sorted_array = np.sort(a)
print(sorted_array)  # 输出: array([1, 2, 3, 4, 5])#对矩阵的每一行进行排序
sorted_matrix = np.sort(b, axis=1)
print(sorted_matrix)

这些操作在深度学习中非常常见,用于初始化参数、处理数据、进行数学运算等。掌握Numpy是进行深度学习研究的基础。

第二部分:assert

在Python中,assert语句是一个用于调试目的的断言工具。它允许开发者测试一个条件表达式,如果该表达式为False,则会引发一个AssertionError异常。这通常用于验证代码中的假设,确保在程序继续执行之前某些条件是正确的。

基本语法

assert condition, [error_message]

1.condition

condition: 一个表达式,如果该表达式为True,则assert语句不做任何事情,程序继续执行。如果表达式为False,则会引发AssertionError。

2.error_message

error_message(可选): 当condition为False时,assert语句引发的AssertionError的附加错误信息。

示例

下面是一些使用assert语句的例子:

简单断言
x = 10
assert x > 0, "x should be positive"
如果x大于0,上面的代码不会有任何输出。但如果x不大于0,则会引发AssertionError,并显示错误信息"x should be positive"。断言函数参数
def check_positive(number):assert number > 0, f"The number {number} is not positive"return numberprint(check_positive(5))  # 正常执行
print(check_positive(-1)) # 引发AssertionError
在调用check_positive(-1)时,由于-1不是正数,assert语句会引发AssertionError。

注意事项

  1. assert语句在默认情况下是启用的,但可以通过运行Python解释器时使用**-O(优化)标志来禁用所有的assert语句。**
  2. 应该避免在assert语句中包含复杂的表达式或函数调用,因为它们可能会产生副作用。
  3. assert语句不应该用于处理运行时错误,而应该用于捕获不应该发生的内部错误。对于用户输入或外部系统产生的错误,应该使用适当的错误处理机制(如try/except)。
  4. assert语句后面的错误信息应该清晰地描述为什么断言失败,这有助于调试。

断言的用途

  1. 在开发过程中,作为代码的“检查点”,确保代码按预期工作。
  2. 在函数或方法的开始处,验证输入参数的合法性
  3. 在模块或类内部,确保内部状态的一致性
    总之,assert是Python中一个简单但强大的工具,可以用来提高代码的健壮性和可维护性。然而,它应该谨慎使用,避免在生产环境中留下未处理的断言,因为它们可能会在运行时被禁用。

第三部分:迭代器

在Python中,迭代器(Iterator)是一种对象,它能够逐一返回序列中的元素,这种机制允许我们在不暴露底层表示的情况下遍历序列。迭代器是实现迭代协议(iterable protocol)的对象,它必须实现两个方法:iter()next()

以下是关于迭代器的详细介绍:

迭代器协议

迭代器协议是指对象需要提供 iter() 和 next() 两个方法:

1.iter()

iter() 方法返回迭代器对象本身。这是为了使迭代器能够用在for循环和其他需要迭代器的上下文中。

2.next()

next() 方法返回序列中的下一个元素。如果没有元素可返回,则抛出 StopIteration 异常。

迭代器的特点

1.惰性求值

惰性求值:迭代器是惰性的,这意味着它们在需要时才计算下一个值,而不是一次性计算所有值。

2.一次性

一次性:迭代器只能向前移动,不能后退,并且每个元素只能访问一次

3.内存效率

内存效率:迭代器不需要在内存中存储整个序列,这对于大数据集来说非常有用。

创建迭代器

你可以通过定义一个包含 __iter__() 和 __next__() 方法的类来创建迭代器:class MyIterator:def __init__(self, start, end):self.current = startself.end = enddef __iter__(self):return selfdef __next__(self):if self.current < self.end:result = self.currentself.current += 1return resultelse:raise StopIteration# 使用迭代器
my_iter = MyIterator(1, 5)
for number in my_iter:print(number)
# 输出: 1 2 3 4

在上面的例子中,MyIterator 类实现了迭代器协议,并创建了一个简单的迭代器,它在给定的范围内生成数字。

使用迭代器

迭代器通常与for循环一起使用,但也可以通过直接调用 __next__() 方法来使用:my_iter = MyIterator(1, 5)
while True:try:print(next(my_iter))except StopIteration:break
#输出: 1 2 3 4

迭代器和可迭代对象

迭代器是可迭代对象(iterable)的一种,但不是所有的可迭代对象都是迭代器。可迭代对象是实现了 iter() 方法的对象,该方法返回一个迭代器。例如,列表、元组、字典和集合都是可迭代对象,但它们本身不是迭代器。

你可以使用 iter() 函数来获取任何可迭代对象的迭代器:

my_list = [1, 2, 3]
my_iter = iter(my_list)
print(next(my_iter))  # 输出: 1

总结来说,迭代器是Python中用于逐个访问序列元素的一种机制,它们通过实现特定的方法来支持迭代操作,是Python编程中处理序列数据的一种高效方式。

可迭代对象

迭代器能处理任何实现了迭代器协议(iterable protocol)的数据类型。在Python中,这意味着数据类型必须提供一个**iter()方法**,该方法返回一个迭代器对象。以下是一些常见的可以由迭代器处理的数据类型:

1.内置序列类型

  1. 列表(List)
  2. 元组(Tuple)
  3. 字符串(String)
  4. 字节串(Byte string)和字节数组(Byte array)

2.集合类型

  1. 集合(Set)
  2. 字典(Dictionary) - 迭代字典时,默认迭代的是键,但也可以迭代值或键值对

3.生成器

  1. 生成器函数(Generator functions) - 使用yield关键字
  2. 生成器表达式(Generator expressions) - 类似于列表推导式,但是使用圆括号而不是方括号

4.文件对象

  1. 打开的文件对象可以迭代,每次迭代返回文件的一行。

5.自定义迭代器

  1. 任何自定义类,只要实现了__iter__()和__next__()方法,就可以创建自己的迭代器。

6.其他内置迭代器

  1. range对象 - 用于生成一个序列的数字
  2. zip、map和filter函数 - 它们可以接受多个可迭代对象作为参数,并返回一个迭代器。

7.迭代器工具

itertools模块中的函数,如chain、cycle、repeat等,它们返回的都是迭代器
迭代器可以处理的数据类型是相当广泛的,几乎所有在Python中需要遍历的集合类型都可以通过迭代器来处理。使用迭代器的好处是它们提供了惰性求值,这意味着数据元素是在迭代过程中按需生成的,而不是一次性加载到内存中,这对于处理大量数据或无限数据流非常有用


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Numpy、assert、迭代器。

相关文章:

程序代码篇---Numpyassert迭代器

文章目录 前言第一部分&#xff1a;Numpy1. 创建数组2. 数组索引和切片3. 数组形状操作4. 数组运算5. 数学函数6. 随机数生成7. 数组排序 第二部分&#xff1a;assert基本语法1.condition2.error_message 示例注意事项断言的用途 第三部分&#xff1a;迭代器迭代器协议1.__iter…...

(笔记+作业)书生大模型实战营春节卷王班---L0G2000 Python 基础知识

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld 课程视频&#xff1a;https://www.bilibili.com/video/BV13U1VYmEUr/ 课程文档&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python 关卡作业&#xff1a;htt…...

分布式微服务系统架构第90集:现代化金融核心系统

#1.1 深化数字化转型&#xff0c;核心面临新挑战 1、架构侧&#xff1a;无法敏捷协同数字金融经营模式转型。 2、需求侧&#xff1a;业务需求传导低效始终困扰金融机构。 3、开发侧&#xff1a;创新产品上市速度低于期望。 4、运维侧&#xff1a;传统面向资源型监控体系难以支撑…...

浅谈Linux 权限、压缩、进程与服务

概述 放假回家&#xff0c;对Linux系统的一些知识进行重新的整理&#xff0c;做到温故而知新&#xff0c;对用户权限管理、文件赋权、压缩文件、进程与服务的知识进行了一次梳理和总结。 权限管理 Linux最基础的权限是用户和文件&#xff0c;先了解基础的用户权限和文件权限…...

SpringBoot中Excel表的导入、导出功能的实现

文章目录 一、easyExcel简介二、Excel表的导出2.1 添加 Maven 依赖2.2 创建导出数据的实体类4. 编写导出接口5. 前端代码6. 实现效果 三、excel表的导出1. Excel表导入的整体流程1.1 配置文件存储路径 2. 前端实现2.1 文件上传组件 2.2 文件上传逻辑3. 后端实现3.1 文件上传接口…...

JavaScript前后端交互-AJAX/fetch

摘自千峰教育kerwin的js教程 AJAX 1、AJAX 的优势 不需要插件的支持&#xff0c;原生 js 就可以使用用户体验好&#xff08;不需要刷新页面就可以更新数据&#xff09;减轻服务端和带宽的负担缺点&#xff1a; 搜索引擎的支持度不够&#xff0c;因为数据都不在页面上&#xf…...

动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)

概览检索 动态规划DP 概览&#xff08;点击链接跳转&#xff09; 动态规划DP 背包问题 概览&#xff08;点击链接跳转&#xff09; 完全背包问题 原题链接 AcWiing 3. 完全背包问题 题目描述 有 N种物品和一个容量是 V的背包&#xff0c;每种物品都有无限件可用。 第 i种物…...

【cocos creator】【模拟经营】餐厅经营demo

下载&#xff1a;【cocos creator】模拟经营餐厅经营...

JavaScript系列(52)--编译优化技术详解

JavaScript编译优化技术详解 &#x1f680; 今天&#xff0c;让我们深入探讨JavaScript的编译优化技术。通过理解和应用这些技术&#xff0c;我们可以显著提升JavaScript代码的执行效率。 编译优化基础概念 &#x1f31f; &#x1f4a1; 小知识&#xff1a;JavaScript引擎通常…...

【深度学习】softmax回归的从零开始实现

softmax回归的从零开始实现 (就像我们从零开始实现线性回归一样&#xff0c;)我们认为softmax回归也是重要的基础&#xff0c;因此(应该知道实现softmax回归的细节)。 本节我们将使用Fashion-MNIST数据集&#xff0c;并设置数据迭代器的批量大小为256。 import torch from IP…...

【Redis】set 和 zset 类型的介绍和常用命令

1. set 1.1 介绍 set 类型和 list 不同的是&#xff0c;存储的元素是无序的&#xff0c;并且元素不允许重复&#xff0c;Redis 除了支持集合内的增删查改操作&#xff0c;还支持多个集合取交集&#xff0c;并集&#xff0c;差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …...

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<3>

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 今天我们来对上一节做一些小补充&#xff0c;了解学习一下assert断言&#xff0c;指针的使用和传址调用…...

代码随想录-训练营-day16

530. 二叉搜索树的最小绝对差 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode…...

Vue 3 中的父子组件传值:详细示例与解析

在 Vue 3 中&#xff0c;父子组件之间的数据传递是一个常见的需求。父组件可以通过 props 将数据传递给子组件&#xff0c;而子组件可以通过 defineProps 接收这些数据。本文将详细介绍父子组件传值的使用方法&#xff0c;并通过优化后的代码示例演示如何实现。 1. 父子组件传值…...

谈谈你所了解的AR技术吧!

深入探讨 AR 技术的原理与应用 在科技飞速发展的今天&#xff0c;AR&#xff08;增强现实&#xff09;技术已经悄然改变了我们与周围世界互动的方式。你是否曾想象过如何能够通过手机屏幕与虚拟物体进行实时互动&#xff1f;在这篇文章中&#xff0c;我们将深入探讨AR技术的原…...

神经网络的数据流动过程(张量的转换和输出)

文章目录 1、文本从输入到输出&#xff0c;经历了什么&#xff1f;2、数据流动过程是张量&#xff0c;如何知道张量表达的文本内容&#xff1f;3、词转为张量、张量转为词是唯一的吗&#xff1f;为什么&#xff1f;4、如何保证词张量的质量和合理性5、总结 &#x1f343;作者介…...

爬取鲜花网站数据

待爬取网页&#xff1a; 代码&#xff1a; import requestsfrom lxml import etree import pandas as pdfrom lxml import html import xlwturl "https://www.haohua.com/xianhua/"header {"accept":"image/avif,image/webp,image/apng,image/sv…...

vue框架技术相关概述以及前端框架整合

vue框架技术概述及前端框架整合 1 node.js 介绍&#xff1a;什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Google的V8引擎。 作用 1 运行java需要安装JDK&#xff0c;而Node.js是JavaScript的运行环…...

深入解析 C++ 字符串处理:提取和分割的多种方法

在 C 编程中&#xff0c;字符串处理是一个常见的任务&#xff0c;尤其是在需要从字符串中提取特定数据时。本文将详细探讨如何使用 C 标准库中的工具&#xff08;如 std::istringstream 和 std::string 的成员函数&#xff09;来提取和分割字符串&#xff0c;并分析不同方法的适…...

数据结构 树2

文章目录 前言 一&#xff0c;二叉搜索树的高度 二&#xff0c;广度优先VS深度优先 三&#xff0c;广度优先的代码实现 四&#xff0c;深度优先代码实现 五&#xff0c;判断是否为二叉搜索树 六&#xff0c;删除一个节点 七&#xff0c;二叉收索树的中序后续节点 总结 …...

NeetCode刷题第19天(2025.1.31)

文章目录 099 Maximum Product Subarray 最大乘积子数组100 Word Break 断字101 Longest Increasing Subsequence 最长递增的子序列102 Maximum Product Subarray 最大乘积子数组103 Partition Equal Subset Sum 分区等于子集和104 Unique Paths 唯一路径105 Longest Common Su…...

Google Chrome-便携增强版[解压即用]

Google Chrome-便携增强版 链接&#xff1a;https://pan.xunlei.com/s/VOI0OyrhUx3biEbFgJyLl-Z8A1?pwdf5qa# a 特点描述 √ 无升级、便携式、绿色免安装&#xff0c;即可以覆盖更新又能解压使用&#xff01; √ 此增强版&#xff0c;支持右键解压使用 √ 加入Chrome增强…...

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card 论文标题&#xff1a;RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者&#xff1a;Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接&#xff1a;https://arxiv.org/ab…...

什么是Rust?它有什么特点?为什么要学习Rust?

什么是Rust&#xff1f;它有什么特点&#xff1f;为什么要学习Rust&#xff1f; 如果你是一名编程初学者&#xff0c;或者已经有一些编程经验但对Rust感兴趣&#xff0c;那么这篇文章就是为你准备的&#xff01;我们将用简单易懂的语言&#xff0c;带你了解Rust是什么、它有什…...

[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型

Paper Card 论文标题&#xff1a;Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者&#xff1a;Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…...

AIP-134 标准方法:Update

编号134原文链接AIP-134: Standard methods: Update状态批准创建日期2019-01-24更新日期2022-06-02 REST API通常向资源URI&#xff08;如 /v1/publishers/{publisher}/books/{book} &#xff09;发出 PATCH 或 PUT 请求&#xff0c;更新资源。 面向资源设计&#xff08;AIP-…...

计算机网络一点事(24)

TCP可靠传输&#xff0c;流量控制 可靠传输&#xff1a;每字节对应一个序号 累计确认&#xff1a;收到ack则正确接收 返回ack推迟确认&#xff08;不超过0.5s&#xff09; 两种ack&#xff1a;专门确认&#xff08;只有首部无数据&#xff09; 捎带确认&#xff08;带数据…...

DIFY源码解析

偶然发现Github上某位大佬开源的DIFY源码注释和解析&#xff0c;目前还处于陆续不断更新地更新过程中&#xff0c;为大佬的专业和开源贡献精神点赞。先收藏链接&#xff0c;后续慢慢学习。 相关链接如下&#xff1a; DIFY源码解析...

Kafka SSL(TLS)安全协议

文章目录 Kafka SSL&#xff08;TLS&#xff09;安全协议1. Kafka SSL 的作用1.1 数据加密1.2 身份认证1.3 数据完整性1.4 防止中间人攻击1.5 确保安全的分布式环境1.6 防止拒绝服务&#xff08;DoS&#xff09;攻击 2. Kafka SSL 配置步骤&#xff08;1&#xff09;创建 SSL 证…...

hexo部署到github page时,hexo d后page里面绑定的个人域名消失的问题

Hexo 部署博客到 GitHub page 后&#xff0c;可以在 setting 中的 page 中绑定自己的域名&#xff0c;但是我发现更新博客后绑定的域名消失&#xff0c;恢复原始的 githubio 的域名。 后面搜索发现需要在 repo 里面添加 CNAME 文件&#xff0c;内容为 page 里面绑定的域名&…...