Python
文章平均质量分 89
Python
Iareges
这个作者很懒,什么都没留下…
展开
-
浮点数的存储方式、bf16和fp16的区别
目录1. 小数的二进制转换2. 浮点数的二进制转换3. 浮点数的存储3.1 以fp32为例3.2 规约形式与非规约形式4. 各种类型的浮点数5. BF16和FP16的区别Ref1. 小数的二进制转换十进制小数转换成二进制小数采用「乘2取整,顺序排列」法。具体做法是:用 222 乘十进制小数,可以得到积,将积的整数部分取出,再用 222 乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进原创 2024-04-17 18:11:21 · 929 阅读 · 2 评论 -
Python中的抽象基类(ABC)
抽象基类(Abstract Base Classes,ABCs)是一种特殊的类,它声明了一组方法和属性,但不完全实现它们。这些类不能被实例化,其主要目的是被继承和实现。通过定义一个或多个抽象方法,ABCs为子类提供了一个框架,要求子类实现特定的方法或属性。抽象基类有助于确保子类具有一致的接口设计。这意味着所有继承自同一个抽象基类的子类都将实现相同的方法和属性,从而实现了接口的一致性和可预测性。这种模式特别适用于需要多种实现相同接口的场景,如插件系统、策略模式等。原创 2024-04-09 20:16:01 · 403 阅读 · 0 评论 -
一文搞懂dataclass和field
它旨在通过使用装饰器和类型注解来减少样板代码,特别是在创建一个。原创 2024-03-15 17:19:17 · 779 阅读 · 1 评论 -
还在用torch.save()?快来看看safetensors吧!
Safetensors 是一个由 HuggingFace 开发的库(采用 Rust 编写),用于安全地存储和加载张量(tensors)。与其他序列化格式(如 pickle)相比,Safetensors 提供了更快的加载速度和更高的安全性。这个库特别适用于深度学习模型的序列化,尤其是在需要高效加载大型模型权重时。原创 2024-03-11 23:12:09 · 407 阅读 · 0 评论 -
浅谈Mixin(混入模式)
在面向对象编程中,追求代码复用性和灵活性是主要目标之一。Python作为一种功能强大的编程语言,为达成这些目标提供了诸多机制。其中,Mixin概念便是经常被提及的一种模式。所谓Mixin,亦即混入(Mix-in),是一种编程模式,通常表现为一些特定的类。这些类封装了一些独立的功能单元,以便其它子类通过继承来获得,其主旨在于将这些功能融入子类中。得益于Python的多重继承特性,一个子类能够继承多个Mixin类,这使得根据需求灵活组合不同功能成为可能。原创 2024-03-11 11:40:42 · 473 阅读 · 0 评论 -
Python中的泛型编程
泛型编程的引入主要是为了解决代码重用的问题。在没有泛型的情况下,如果你想要实现一个功能(比如排序或查找),对于不同类型的数据(整数、浮点数、字符串等)你可能需要写多个几乎相同的函数。这不仅增加了代码量,也增加了维护成本和出错的机会。泛型编程允许你编写与类型无关的代码,从而使得一个函数或一个类可以用于多种类型,减少了代码的重复,提高了代码的复用性和可维护性。原创 2024-03-08 18:16:45 · 1115 阅读 · 0 评论 -
如何高效地将大文件按行数进行均匀划分?
⚠️ 读者可能注意到,在实验三中,PFS划分结果的行数和并不等于623517,而是等于626323,这是因为两者统计行数的方式不一样。,如果单机去跑效率将会十分低下,考虑将这个大文件均匀地划分成多份,让一台机器负责一份,最后再合并多份的结果。首先可以明确的是,最后一份的行数肯定要小于前两份的行数,只需要计算出。实验二:选用4.3G的txt文件,总行数为3275572,取。实验一:选用1.4G的txt文件,总行数为419402,取。实验三:选用1.8G的txt文件,总行数为623517,取。原创 2024-03-05 00:11:13 · 1040 阅读 · 0 评论 -
一种简易的多进程文件读写器
在数据清洗场景下,我们可能需要对一个.jsonl文件清洗以得到另一个.jsonl文件。一种直观的做法就是逐行读取,逐行清洗,然后逐行写入,这一流程的示意图如下:pass这种单进程的处理方法非常耗时,若改用多进程,则能显著提高效率。注意到在时间消耗方面,有Clean≫Read≈WriteClean≫Read≈Write因此可以考虑让一个进程去ReadRead,多个进程去CleanWriteCleanWrite。原创 2024-02-25 21:56:48 · 860 阅读 · 2 评论 -
详解Megatron中的数据混合算法(BlendableDataset)
🧑💻 本文主要讲解Megatron中的数据混合算法。原创 2024-02-24 14:12:26 · 1144 阅读 · 0 评论 -
Python判断列表A中是否有元素出现在了列表B中
方法耗时(秒)暴力法≈480000≈480000哈希表法0.51∼0.530.51∼0.53集合法0.50.50.5如果有更快的方法欢迎在评论区补充~原创 2024-02-08 22:28:01 · 861 阅读 · 0 评论 -
Faiss的基本使用
Faiss(Facebook AI Similarity Search)是一个用于高效相似性搜索和密集向量聚类的库。它包含了能够在任意大小的向量集合中进行搜索的算法,甚至适用于那些可能无法完全装入内存的数据集。此外,Faiss 还包含了评估和参数调优的支持代码。Faiss 用 C++ 编写,并为 Python/numpy 提供了完整的接口。其中一些最有用的算法实现了 GPU 支持。Faiss 提供了多种相似性搜索方法。原创 2023-12-18 15:18:36 · 2147 阅读 · 1 评论 -
恢复排序后的数组
代表把第6个位置上的数字移动到第2个位置上。若要恢复原先的乱序,就要把第2个位置上的数字移动到第6个位置上。排序的过程可以认为是把箭头左边对应位置上的数字移动到箭头右边对应的位置上,例如。函数,但要从有序恢复至原先的乱序又该如何做呢?如何获得上面的映射呢?首先我们可以获得排序后的。我们可以在排序的时候记录下索引的变化。处的元素就会被彻底覆盖掉,无法再恢复。有一个问题是,空间复杂度一定是。从乱序到有序只需要调用一下。原创 2023-12-16 15:32:09 · 446 阅读 · 0 评论 -
详解Python中的json库
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在不同应用程序之间传递数据。它是一种文本格式,易于阅读和编写,同时也易于解析和生成。JSON最初是由Douglas Crockford于2001年提出的,它基于JavaScript对象字面量语法,但已经成为一种独立于编程语言的数据格式。乍一看json对象和python中的字典长得差不多,但前者是一种数据格式,而后者是一种数据结构。具体来讲,json对象由一个大括号{}组成,大括号里保存的是若干个。原创 2023-09-23 23:22:50 · 1819 阅读 · 0 评论 -
Python中的上下文管理器
如果在try块中发生异常,Python会跳转到except块来处理异常。finally块中的代码总是会执行,无论是否发生异常。只有在try块中没有引发异常时,才会执行else块中的代码。返回的列表中,每一个元素都代表了文件中的一行内容(会包含末尾的换行符)。很多时候我们不知道try块中可能会引发什么样的异常,为此我们可以使用绝大部分异常的一个父类。,它用于自动管理资源,无论过程中是否发生错误,都可以保证对资源的正确处理。,且try块中第一个异常之后到第一个except之前的语句都不会被执行。原创 2023-09-11 17:52:07 · 291 阅读 · 0 评论 -
Python中关于可变循环的一些坑
观察下面两种循环,它们的输出结果相同吗?综上,如果希望循环是可变的,那么请使用。的数组上进行遍历时,使用。由此可以看出,在一个。原创 2023-08-13 20:39:01 · 319 阅读 · 0 评论 -
macOS为Sublime Text 4配置C++/Python开发环境
超详细!!!在macOS上为Sublime Text 4配置C++及Python的开发环境原创 2023-01-07 22:40:14 · 3336 阅读 · 0 评论 -
argparse——命令行参数解析
是 Python 的一个标准库,用于命令行参数的解析,这意味着我们无需在代码中手动为变量赋值,而是可以直接在命令行中向程序传递相应的参数,再由变量去读取这些参数。在之前的学习过程中,可能你已经注意到了,每次我们为解析器添加完相应的选项/位置参数后,都要执行一遍。可以看出,如果在命令行中没有提供相应的选项,并且该选项也没有默认值,则在命名空间中该选项的值为。的,如果我们调换顺序,则帮助信息中的两个参数的位置也将调换,这也诠释了 “位置” 的含义。后面跟的数字不是1,3,5中的一个就会报错。......原创 2022-08-09 23:05:32 · 4706 阅读 · 5 评论 -
Python 2D列表转1D列表的常见方法汇总
Python二维列表转一维列表的常见方法汇总原创 2022-07-09 22:09:33 · 923 阅读 · 8 评论 -
数据结构Python版(四)——队列
队列是一种操作受限的线性表,其限制为仅允许在表的一端插入,而在表的另一端进行删除。把进行插入的一端称为队尾(rear),把进行删除的一端称作队头或队首(front)。向队列中插入元素称为进队或入队,从队列中删除元素称为出队或离队。队列的一个显著特点是:FIFO(First In First Out)。队列需要实现的方法和栈一样:、、 和 。采用顺序存储结构的队列称为顺序队。我们用列表 来存放队列中的元素,另外设置两个指针,队头指针为 front,队尾指针为 rear。为简单起见,这里使用固定容量的列表:f原创 2022-06-25 15:42:09 · 2385 阅读 · 8 评论 -
数据结构Python版(三)——栈
栈是一种只能在同一端进行插入/删除操作的线性表。表中允许进行插入/删除操作的一端称为栈顶。栈顶的当前位置是动态的,可以用一个称为栈顶指针的位置指示器来指示。表的另一端称为栈底。当栈中没有元素时称为空栈。栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为出栈或退栈。栈的一大特点是 LIFO,即 Last In First Out。抽象数据类型栈的定义如下:数据对象:D={ai∣0≤i≤n−1,n≥0}数据关系:R={r}r={∣ai,ai+1∈D,i=0,⋯ ,n−2}基本运算:empty......原创 2022-06-23 09:30:20 · 1104 阅读 · 7 评论 -
数据结构Python版(二)——链表
数据结构-Python-链表原创 2022-06-20 15:54:30 · 1737 阅读 · 15 评论 -
数据结构Python版(一)——顺序表
线性表就是数据元素的排列像一条线一样的表。线性表严格的定义是具有相同特性的数据元素组成的一个有限序列。其特征有3个:不同于集合,线性表中可以出现值相同的元素。线性表的逻辑结构一般表示为 (a0,a1,⋯ ,an−1)(a_0,a_1,\cdots,a_{n-1})(a0,a1,⋯,an−1),用 n(n≥0)n(n\geq0)n(n≥0) 表示线性表的长度(即线性表中元素的个数)。当 n=0n=0n=0 时,表示线性表是一个空表,不包含任何数据元素。线性表的逻辑特征:每个元素最多只有一个前驱元素,也最原创 2022-06-14 10:32:10 · 5033 阅读 · 22 评论 -
浅谈sklearn中的数据预处理
sklearn中的数据预处理原创 2022-06-12 16:28:50 · 552 阅读 · 19 评论 -
史上最易懂的Python正则表达式教程
Python正则表达式原创 2022-06-06 11:34:07 · 289 阅读 · 9 评论 -
conda常用命令汇总
conda常用命令汇总原创 2022-06-03 08:58:42 · 44215 阅读 · 21 评论 -
史上最易懂的f-string教程,收藏这一篇就够了
Python中的字符串格式化——f-string原创 2022-05-26 11:15:45 · 6735 阅读 · 10 评论 -
深入浅出Python中的装饰器
目录一、闭包二、装饰器三、使用多个装饰器四、被装饰的函数带有参数五、带参数的装饰器六、使用类作为装饰器七、内置装饰器7.1 @classmethod7.2 @staticmethod7.3 @property一、闭包要了解什么是装饰器(decorator),我们首先需要知道闭包(closure)的概念。闭包,又称闭包函数或者闭合函数,通俗一点来讲,当某个函数被当成对象返回时还夹带了外部变量,就形成了一个闭包。以打印Hello World为例,我们先来看一下嵌套函数的结构应该是什么样的:def pr原创 2022-05-17 18:14:36 · 1104 阅读 · 44 评论 -
Python中的迭代器与生成器
目录一、迭代器(Iterator)1.1 可迭代对象(Iterable)1.2 将可迭代对象转化为迭代器1.3 构造迭代器二、生成器(Generator)2.1 使用 `()` 构造生成器2.2 使用带有 `yield` 关键字的函数构造生成器一、迭代器(Iterator)1.1 可迭代对象(Iterable)可迭代对象,可以简单理解为可遍历对象,即能够使用 for 循环遍历的对象。Python中常见的可迭代对象有:列表、元组、字符串、集合、range、字典等。迭代器和生成器都是可迭代对象。对原创 2022-05-04 18:45:13 · 2639 阅读 · 29 评论 -
半小时速通Python标准库os
目录前言一、系统&变量1.1 os.name1.2 os.getcwd()1.3 os.environ1.4 os.sep二、文件&目录2.1 os.listdir()2.2 os.chdir()2.3 os.mkdir()2.4 os.makedirs()2.5 os.rmdir()2.6 os.removedirs()2.7 os.remove()2.8 os.rename()三、路径(os.path)3.1 os.path.basename()3.2 os.path.dirname()原创 2022-05-04 16:00:32 · 1073 阅读 · 4 评论