Python
文章平均质量分 62
JasonLiu1919
微信公众号《小窗幽记机器学习》。却顾所来径,苍苍横翠微。个人微信号:onepieceand
展开
-
Python专题 | 全面评测对比:子串匹配索引位置各方案
想要查找子串test_sub在原始文本test_str的索引位置。原创 2023-06-18 16:40:23 · 139 阅读 · 0 评论 -
通过mask提取list中的目标元素
需求描述:有2个list,一个是待处理的list,另一个是mask。现在想要根据mask提取出待处理list中的元素。原创 2023-05-19 21:08:31 · 488 阅读 · 0 评论 -
多类别分类任务(multi-class)中为何precision,recall和F1相等?
本文主要介绍在 multi-class 分类任务中,使用 micro 类指标, micro-precision, micro-recall和micro-F1值都是相等这一情况的说明。原创 2022-10-10 10:51:58 · 4702 阅读 · 0 评论 -
python读取文件由于编码问题失败汇总
汇总Python读取文件失败的各种情况及其解决方案原创 2022-09-20 13:43:50 · 4800 阅读 · 0 评论 -
python3中二维数组求最大值
背景在求二维list中最大值时, 不加思考地使用2层max函数,如max(max(list_data)),但是返回结果是错误的。为此,重新梳理下这个错误的知识点。二维数组求最大值a=[[1,2], [2,5], [3,4]] max(a) 输出结果如下:>>> a=[[1,2], [2,5], [3,4]] >>> max(a)[3, 4]可以看出,第一次调用max其实是按照元素里面的第一个元素的排列顺序,输出最大值。如果第一个原创 2022-05-30 16:32:57 · 12785 阅读 · 0 评论 -
聚类算法指标整理
文章目录前言纯度(purity)纯度的计算Python代码标准互信息(NMI)熵互信息标准互信息MI 和 NMI的计算实现 Python 版调整互信息(AMI)示例代码兰德系数(Rand Index)示例代码调整兰德系数(Adjusted Rand index)示例代码前言本文主要介绍聚类算法的一些常见评测指标。假设某一种算法得到聚类结果为:A=[12111112222311333]\mathrm{A}=\left[\begin{array}{lllllllll}1 & 2 &原创 2021-11-28 17:54:08 · 1730 阅读 · 0 评论 -
Python 字典内存释放及其浅拷贝和深拷贝之间的区别
背景在用Python搭建服务过程使用字典存放自定义的对象,需要特别指出的是value值是占用内存空间较大的对象。随着时间的流逝和数据的累积,字典的key变得越来越多,从而使得整个字典对象占用过大的内存空间。此时,需要根据实际需要定期删除特定的keys,及时释放内存,否则就可能引发血案:OOM,进程被kill。字典内存释放众所周知,去掉字典中元素可以使用 pop 或者 del 方法,但是这两种方法都没有真正地释放对应的元素的空间。Python 为了保证hash table 探测链的完整,对于那个被删除的原创 2021-11-18 10:23:59 · 1466 阅读 · 0 评论 -
python中如何释放字典的内存占用?
背景构建一个大字典,并往其中增减元素,但是发现整体的内存消耗并没有因此而维持稳定状态,而是不断增加。问题解析Python中的字典,只有不再使用的时候才会释放对应的内存。在使用 pop 或者 delete 删除字典中的item(或者说entry)后,为了保证hash table 探测链的完整,那个被删除的entry只是被标记成了空,并没有真正被删除掉,所以该字典的内存占用没有得到释放。这是为了避免多度重建hash table。那如何释放字典的内存?现已知的方案是创建或者拷贝一个旧字典再覆盖掉新字典。具体原创 2021-09-17 15:36:19 · 4922 阅读 · 0 评论 -
python中用 multiprocessing 加速任务处理
背景面对海量任务需要高效对其进行消费,而任务之间不存在处理结果的相互依赖。方案1: multiprocessing模块以下模拟每个任务处理耗时1s,共有50任务的场景。示例代码如下:import timefrom multiprocessing import Pooldef function_call(task_dict): time.sleep(1) # 模拟真实的处理流程 print(task_dict)if __name__ == '__main__':原创 2021-08-28 10:51:37 · 567 阅读 · 0 评论 -
python中的@property装饰器
https://www.programiz.com/python-programming/property引言本文将要介绍Python中@property装饰器,这是一种python风格的getters和setters方法。Python编程为我们提供了一个内置的@property装饰器,它使面向对象编程中的getter和setter更容易使用。在深入了解@property装饰器是什么之前,让我们先对为什么需要它有一个直观的认识。类中没有Getters 和 Setters方法假设我们决定创建一个以摄氏原创 2021-02-08 17:47:37 · 635 阅读 · 2 评论 -
python中的装饰器(Decorator)
引言Python有一个名为decorator的有趣特性,可以在现有代码基础上添加功能,即进行装饰。这种方式也称为元编程(metaprogramming ),因为程序的一部分试图在编译时修改程序的另一部分。预备知识第一, 在学习Decorators之前,我们需要有个概念:Python中一切都是对象。定义的名称只是绑定到这些对象的标识符。函数也不例外,也是对象(带有属性)。可以将不同的名称绑定到同一个函数对象。举例如下:def first(msg): print(msg)first("He原创 2021-02-08 14:56:06 · 363 阅读 · 2 评论 -
python中的闭包(closure)
背景本文尝试介绍Python中的闭包(closure),包括闭包是什么? 为什么要使用闭包?如何使用闭包?嵌套函数及非局部变量在介绍闭包之前,需要先明白什么是嵌套函数和非局部变量。在一个函数(fun1)中定义的另一个函数(fun2)称为嵌套函数。嵌套函数(fun1)可以访问外围作用域的变量,即为非局部变量。换一句话说,嵌套函数能够访问enclosing scope(闭包作用域,或者外围作用域,或者外层作用域)下的变量。这些非局部变量默认情况下是只读的,为了修改它们,必须显式地将它们声明为非局部变量(使原创 2021-02-08 10:57:03 · 957 阅读 · 1 评论 -
获取list中出现频数最多的元素
背景给定一个列表,找到其中最高频的元素。比如输入:[2, 1, 2, 2, 1, 3]期望输出:2再比如输入:['华中科技大学', '韵苑', '沁苑', '韵苑']期望输出:韵苑方法1:使用集合 def most_frequent(lst): return max(set(lst), key=lst.count) a=['华中科技大学', '韵苑', '沁苑', '韵苑']#[5,2,3,4] # ['华中科技大学', '韵苑', '沁苑',原创 2021-01-06 15:56:29 · 2505 阅读 · 1 评论 -
根据子字符列表过滤掉给定列表
背景给定两个字符串列表string_list和substr_list,筛选出string_list中包含substr_list中元素的所有字符串。示例:Input : string_list= ['city1', 'class5', 'room2', 'city2'] substr_list= ['class', 'city']Output : ['city1', 'class5', 'city2']Input : string_list= ['coordinates', 'xy原创 2020-12-30 14:10:34 · 123 阅读 · 0 评论 -
给定值查找在list中的近邻值
背景给定一个有序list 和 目标value,如果将该目标value值插入list中,那么索引位置是多少。举例说明:a_list=[0, 2, 4, 6, 7, 9, 11, 12, 13, 14, 18, 19, 21],给定value=8,那么此时8位于 a_list中的7和9之间,该位置对应的索引位置是5,所以输出索引位置5。方法用bisect,bisect是python内置模块,用于有序序列的插入和查找。查找: bisect(array, item)插入: insort(array,i原创 2020-12-28 16:12:38 · 904 阅读 · 0 评论 -
pandas 两列数据合并
背景有两个字段,想要将其合并成为一个新的字段。比如当标签分散在不同字段时候,想要将各个标签融合一起。实现def test(): import pdb import pandas as pd df = pd.DataFrame({'year': ['2019', '2020'], 'quarter': ['q1', 'q2']}) df['year_quarter'] = df['year'] + "_" + df['quarter'] # 方法1 df['yea原创 2020-11-18 18:32:12 · 15010 阅读 · 0 评论 -
Python学习笔记-列表的条件过滤生成
需求请编写一个函数,它接受一个 list,然后把list中的所有字符串变成大写后返回,非字符串元素将被忽略。代码def toUppers(L): L1=[x.upper() for x in L if isinstance(x, str)] return L1+[x for x in L if isinstance(x, str)==False]print(toUppers(['H原创 2016-03-06 14:37:03 · 1349 阅读 · 0 评论 -
python学习笔记-半角字符和全角之间的转换
背景:在做日文文本的处理时候,统一半全角字符。分析:说明: 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E) 半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E) 特例: 空格比较特殊,全角为 12288(0x3000),半角为 32(0x20) 除空格外,全角/半角按unicode编码排序在顺序上是对应的(半角 +原创 2017-03-31 14:37:30 · 2609 阅读 · 1 评论 -
Python下的进程间通信-管道
背景:在python下利用subprocess模块实现进程间的通信。 使用subprocess包中的函数创建子进程的时候,要注意: 1) 在创建子进程之后,父进程是否暂停,并等待子进程运行。 2) 函数返回什么 3) 当returncode不为0时,父进程如何处理。封装过的高级接口:启动一个子进程尽量是使用下面的便捷函数。当对于更高级的使用场景它们不能满足需求时,可以使用底层的Popen接口原创 2017-03-25 18:30:20 · 4792 阅读 · 0 评论 -
Python中redis的使用
背景windows下Python中redis的使用安装:windows版的redis(https://github.com/MSOpenTech/redis)直接下载(https://github.com/MSOpenTech/redis/releases)只需要解压zip文件即可使用。 解压后到文件目录下执行redis-server.exe 默认使用的端口号是6379。此时的redis服务就启原创 2017-04-30 14:31:07 · 6770 阅读 · 0 评论 -
Python线程池使用
背景多线程不能利用CPU多核优势,IO密集型可用多线程,CPU密集型适合用多进程。在采用多线程的时候就无需手动根据任务数量来创建线程,而是在建立线程池之后,不断地对线程池中空闲线程进行任务的分配。 使用线程池的主要优点: (1)可以控制产生线程的数量。通过预先创建一定数量的工作线程并限制其数量,控制线程对象的内存消耗。 (2)降低系统开销和资源消耗。通过对多个请求重用线程,线程创建、销毁的开销原创 2017-04-25 21:20:34 · 3120 阅读 · 0 评论 -
DeepLearing学习笔记-行归一化和broadcasting
背景:数据归一化能够提高梯度下降的收敛速度归一化:归一化方式:x∥x∥ \frac{x}{\| x\|} ,每行除以其行向量的范数。 例如x=[023644](1)x = \begin{bmatrix} 0 & 3 & 4 \\ 2 & 6 & 4 \\\end{bmatrix}\tag{1} 范数的计算:∥x∥=np.linalg.norm(x,axis=1,keepd原创 2017-09-24 14:23:08 · 645 阅读 · 0 评论 -
DeepLearing学习笔记-数据矢量化
背景:通过矢量化提高矩阵运算速度准备知识:dot/outer/elementwise product 的区别:dot product 点乘:向量点积: 向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。 定义:a⋅b=||a||||b||cos(θ)a \cdot b= ||a|| ||b||\cos(\theta),原创 2017-09-24 15:59:09 · 3385 阅读 · 0 评论 -
DeepLearing学习笔记-损失函数
背景:L1损失函数:损失函数最简单的定义就是L1损失函数,计算预测值(y^ \hat{y} )和真实值(y y)之间的绝对差值,并累计求和作为模型的代价函数。通过优化算法如梯度下降算法来使得代价函数L1最小化,从而获取模型。 L1 损失函数的定义: L1(y^,y)=∑i=0m|y(i)−y^(i)|(2)\begin{align*} & L_1(\hat{y}, y) = \sum_{i=0}原创 2017-09-24 18:33:56 · 528 阅读 · 0 评论 -
python多线程实践
背景:海量数据任务的并发处理,IO较为频繁,所以采用多线程的方式进行处理方案:一个主线程进行任务的分发,另外再独立创建一定数量的并发工作线程代码:# -*- coding: utf-8 -*-__author__ = 'jasonliu''''由于是IO密集型,采用用线程的方式进行处理注意本版本代码仅仅适用于python3'''import hashlibimport jsonimpo原创 2017-09-21 20:38:09 · 408 阅读 · 0 评论 -
windows下基于python中的rename进行批量重命名
背景:在windows下对文件进行批量重命令。 注意其中的字符编码,由于windows是gbk的编码风格,一定要注意转换,否则会找不到文件的。代码:# -*- coding: cp936 -*-__author__ = 'jason''''对歌词文件进行批量重命名通过提取出的文件名,正则表达式的方式提取出32位的hash'''hash_reg = r'(\w{32})'import o原创 2017-03-20 21:26:05 · 3242 阅读 · 3 评论 -
(ZZ)简单的英文单词纠错
原理介绍:简单的介绍一下它的工作原理. 给定一个单词, 我们的任务是选择和它最相似的拼写正确的单词. (如果这个单词本身拼写就是正确的, 那么最相近的就是它自己啦). 当然, 不可能绝对的找到相近的单词, 比如说给定 lates 这个单词, 它应该别更正为 late 呢 还是 latest 呢? 这些困难指示我们, 需要使用概率论, 而不是基于规则的判断. 我们说, 给定一个词 w, 在所有正确的拼转载 2017-03-07 09:34:38 · 2772 阅读 · 0 评论 -
python学习笔记-基于flask的web服务提供
背景:在python环境中提供web服务。根据请求的url中的关键字和参数进行具体处理。流程:客户端->web 服务器->WSGI->application 客户端发送 HTTP 请求,web 服务器在一个地址的端口上等待接收,一旦收到,会将请求通过 WSGI 交给 application 处理,application 就是 flask 框架编写的应用,application 对消息处理后,也通过原创 2017-01-17 14:19:49 · 2357 阅读 · 0 评论 -
Python学习笔记-偏函数
python中的偏函数是由functools模块所提供,当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。 比如在int函数中转为2进制的时候 方法1:每次都传入int(x, base=2) 方法2:定义一个int2()的函数,默认把base=2传进去def int2(x, base=2): return int(x, base)方法原创 2016-04-12 21:53:27 · 499 阅读 · 0 评论 -
Python学习笔记-匿名函数
背景:一般我们常见的函数多是过程式编程,通过匿名函数可以实现函数式编程。 高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算 f(x)=x^2 时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: map(lambda x: x * x, [1, 2, 3, 4,原创 2016-03-26 19:04:02 · 599 阅读 · 0 评论 -
Python学习笔记-httplib使用例子
背景:采用httplib进行网络数据的下载代码:#coding:utf-8import httplibfile1 = open("ids.txt")krcids = []while 1: line = file1.readline() if not line: break line = line.strip('\n') krcid原创 2016-03-24 11:24:36 · 2608 阅读 · 1 评论 -
Python学习笔记-闭包
闭包:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。它只不过是个“内层”的函数,由一个名字(变量)来指代,而这个名字(变量)对于“外层”包含它的函数而言,是本地变量。 在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问:def g(): print 'g()...'def f():原创 2016-03-21 20:15:39 · 554 阅读 · 0 评论 -
Python学习笔记-返回函数
1:python返回函数Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:def f(): print 'call f()...' # 定义函数g: def g(): print 'call g()...' # 返回函数g: r原创 2016-03-20 18:20:41 · 9816 阅读 · 0 评论 -
Python学习笔记-复杂表达式
需求在生成的表格中,对于没有及格的同学,请把分数标记为红色。 注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了:效果代码d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }def generate_tr(name, scor原创 2016-03-06 14:07:07 · 1055 阅读 · 0 评论 -
Python递归例子:汉诺塔问题
背景汉诺塔 (http://baike.baidu.com/view/191666.htm) 的移动也可以看做是典型的递归函数。 对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:如果a只有一个圆盘,可以直接移动到c;如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘原创 2016-03-05 14:19:22 · 1322 阅读 · 0 评论 -
Python编程琐碎-函数调用和参数传递
例子2原创 2014-08-25 16:34:56 · 752 阅读 · 0 评论 -
python学习笔记-基础技能-调试
1:调试一般是用print 进行调试原创 2014-08-06 18:13:14 · 703 阅读 · 0 评论 -
Python学习笔记-装饰器
作用:Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。就是对原函数的一种装饰作用,但是不改变原函数,只是对其调用前后增加一些操作或者信息显示。使用 decorator 用Python提供的 @ 语法,可以简化代码,避免每个函数编写重复性代码。 打印日志,@log 性能检测,@performance 数据库事务,@transaction原创 2016-04-09 17:50:31 · 954 阅读 · 0 评论 -
Python学习笔记-json解析
背景通过接口获取的数据是以json格式进行返回的,为了获取其特殊字段下指定的内容,并对结果写到指定文本中。分析接口返回的内容还在内存可容忍范围内是可以直接在内存中进行操作的。在json解析的时候,需要同json.loads(string)对输入的字符串进行json的解析操作。具体代码见下:代码import urllibimport urllib2import jsonimport pdbdef原创 2016-05-11 17:41:01 · 510 阅读 · 0 评论 -
python学习笔记-POST方式
背景有些接口需要用post进行数据的传递。本文展示两种方式的POST请求。方法1:Request方式代码import urllibimport urllib2import hashlibimport jsonimport timestrReq = "70635045"urlnick = "http://myhello/info_list"servertime = int(time.ti原创 2016-06-24 08:57:44 · 427 阅读 · 0 评论