
Python
Flyforever-Tang
这个作者很懒,什么都没留下…
展开
-
Python:打印目录下每层的文件总数
每一行的数字代表该级目录下的文件总数(包括子目录),下面还会给出每个子目录的统计情况,以及非目录文件数量。原创 2023-09-22 16:09:07 · 337 阅读 · 0 评论 -
Python:list连接时,直接“+=”和=后+的区别
这里的本意,是想要在b后额外连接上[4, 5]这个列表,但是坑点在于使用+=会导致a的值也发生了变化,打印a和b的结果都是[1, 2, 3, 4, 5]。如果不想改变a,那么应该写成。这时a就仍然是[1, 2, 3]。当然,对b赋值的时候使用a.copy()也可以避免a被改变,这里的要点是不能简单把+=和=后+完全等同。原创 2023-08-01 19:59:41 · 418 阅读 · 0 评论 -
Python:列表去重并保持元素原有顺序
借助set,并使用原列表的index方法作为比较函数进行排序即可。use_last_duplicate为False时,重复元素以在原列表中第一次出现的位置为准,这也是因为index方法返回的就是第一次出现的下标;而use_last_duplicate为True时,重复元素以在原列表中最后一次出现的位置为准原创 2023-07-17 11:24:50 · 469 阅读 · 0 评论 -
Python:protobuf版本冲突的一种可能解决方法
This program was compiled against version 3.1.0 of the Protocol Buffer runtime library, which is not compatible with the installed version (3.20.3).原创 2023-06-01 17:17:44 · 3536 阅读 · 1 评论 -
Python:安装paddlepaddle后运行代码报错ImportError: core_avx.so: undefined symbol: _dl_sym, version GLIBC_PRIVA
安装paddlepaddle后运行代码报错ImportError: core_avx.so: undefined symbol: _dl_sym, version GLIBC_PRIVA。改成下面这个版本就好了:python -m pip install paddlepaddle==2.4.0rc0 -i https://pypi.tuna.tsinghua.edu.cn/simple原创 2023-05-25 16:06:49 · 1940 阅读 · 2 评论 -
Python:使用位运算进行大小写转换
今天学习到了一种使用位运算进行大小写转换的方法,分享出来。常见的英语字母大小写转换有三种需求:大小写互换、全转为小写、全转为大写。最常规的做法就是首先判断一下字符是大写字母还是小写字母,然后对应加或减大小写字母的ASCII码差值。注意到这个固定的ASCII码差值等于32,也就是1^5,同时所有大写字母的二进制第6位都是0、小写字母的二进制第6位都是1。基于此,可以写出三种需求的位运算实现版本代码原创 2023-05-09 10:38:35 · 275 阅读 · 0 评论 -
Python:批量重命名whl文件
whl文件是可以使用pip install命令离线安装的Python包。使用whl文件最讨厌的一点在于,由于文件名里指定了其兼容的操作系统版本等信息,在一台机器上可以使用的whl文件放到另一台机器上可能就没法用了。要解决这个问题最直接的做法就是修改whl文件名,如果需要安装的whl文件特别多的时候就会很费时间,写了一个Python脚本批量处理,可以把目录下的所有whl文件统一重命名成大多数平台都支持的py3-none-any版本,代码如下原创 2023-04-23 11:08:44 · 440 阅读 · 0 评论 -
Python:解决类的定义内部无法使用类名为函数注解及代码补全带来的不便
为了美观以及便于代码维护的需要,我们一般会使用函数注解标明每个参数以及返回值的类型。另外,如果写了函数注解,我们在编写代码时编译器也会根据参数的类型提供代码补全提示。但是这样写编译器是会有错误提示的,执行代码会报错“”,并且使用self.right时也没有Node相关属性及方法的补全提示(这里以Pycharm为例)。简单来说,这是因为在内部Node类还没有完成定义,现在类名是无法使用的状态,更加具体的解释感兴趣的同学可以自行搜索,这里不再赘述。解决方法也很简单,就是给类名加上引号。原创 2022-12-15 22:48:24 · 564 阅读 · 0 评论 -
Pytorch:解决使用yolov5时网络不佳导致无法下载数据集的问题
Pytorch:解决使用yolov5时网络不佳导致无法下载数据集的问题原创 2022-10-04 17:43:38 · 1134 阅读 · 0 评论 -
Python:使代码段只执行有限次
debug的时候,有时希望打印某些东西,但是如果代码段刚好在一个循环或者是其他会被执行很多次的部分,那么用来print的语句也会被执行很多次,看起来就不美观。例如:a = 0for i in range(3): a += 1print(a)这里在中间希望确认一下a的类型,debug的时候改成:a = 0for i in range(3): print(type(a)) a += 1print(a)''' 打印结果:<class 'int'><c原创 2022-03-22 22:26:27 · 1982 阅读 · 1 评论 -
Python 判断数组中是否全为某值
使用内置的all函数,函数定义形式:def all(__iterable: Iterable[object]) -> bool使用示例:array = [None, None, None, None]if all(array[i] is None for i in range(len(array))): print('All None')原创 2021-12-22 15:11:16 · 1952 阅读 · 0 评论 -
Python plt.boxplot箱线图上加直线
原创 2021-12-21 19:09:58 · 1763 阅读 · 0 评论 -
Python限定参数类型
Python是动态语言,不像C++和Java等静态语言一样需要定义变量的类型。这使得Python使用起来非常方便,但是有的时候会带来代码理解上的问题,并且由于参数类型不确定,编译器没法很好进行代码补全提示。使用 参数名:类型 的语法可以在定义类和方法时像静态语言那样指定参数类型,如:def fun(a: list): return a这样参数a就被指定为了list类型,编译器会在调用时做类型检查,并且后续代码编写的时候可以提供list类型相关的代码补全提示。而Python内置的typi原创 2021-11-22 19:19:08 · 7076 阅读 · 0 评论 -
pynput识别组合键(最简单的方法)
首先将监听函数设置为打印按键key,获得组合键对应的键码from pynput.keyboard import Listenerdef on_press(key): print(key)with Listener(on_press=on_press) as listener: listener.join()比如ctrl+c就是’\x03’,ctrl+v是’\x16’,注意是有单引号的。然后根据这个键码监听组合键,需要注意的有两点,一个是键码需要保留单引号并且不能转义,一个是原创 2021-11-20 16:59:23 · 3709 阅读 · 4 评论 -
把一维坐标转换为多维坐标
问题:对于一个一维数组的坐标,如何转换为多维矩阵的坐标?举例:对于一维数组坐标35,在尺寸为[5, 4, 3]的多维矩阵中对应的坐标为(2, 3, 2)。验证:35 = 2 × 12 + 3 × 3 + 2看了上面的问题,我们首先应该联想到的是进制转换或者提取整数各位数的问题(实际上后者就是前者在十进制下的特殊场景)。比如,对于尺寸为[2, 2, 2]的矩阵,一维坐标6在多维矩阵中坐标为(1, 1, 0),对应其二进制表示110。而对于尺寸为[10, 10, 10]的矩阵,一维坐标163在多维矩阵中原创 2021-11-05 15:24:57 · 738 阅读 · 0 评论 -
Python继承 如何在继承父类方法和成员变量的同时不实例化父类
正常情况下,Python继承的写法是这样的:class Human(object): def __init__(self, name): print(f'I am human, my name is {name}.') def eat(self, something): print(f'Eat {something}')class Emperor(Human): def __init__(self, name): super(原创 2021-10-14 22:01:03 · 422 阅读 · 0 评论 -
ndarray合并维度
比如一个(4,100,224,224,3)的数组想将维度前两个维度合并,变成(400,224,224,3),可以直接new_array = ori_array.reshape([400,224,224,3])为了推广到数组各个维度未知的情况,可以改成new_array = ori_array.reshape([ori_array.shape[0] * ori_array.shape[1]] + list(ori_array.shape[2:]))...原创 2021-10-05 14:29:50 · 875 阅读 · 0 评论 -
Python魔法方法
忘了在哪里见到的一张归纳图了,mark一下,侵删原创 2021-09-24 10:20:56 · 70 阅读 · 0 评论 -
Python:Numpy对未知形状的np数组最后几个维度进行操作
做机器学习的时候某个需求不确定输入的形状是类似(224, 224, 3)还是(1000, 224, 224, 3),分别代表了单张图像和一批图像,想对它/它们进行切片只取每一张图像左上角的(112, 112, 3)部分。使用…可以用来代表未知形状数组前面的维度,效果有点类似于索引中的-1,进行倒序处理。代码如下:import numpy as npimg = np.empty([224, 224, 3])img = img[..., :112, :112, :]print(img.shape) #(原创 2021-09-04 20:28:13 · 1107 阅读 · 0 评论 -
keras读取预训练模型统一接口
import numpy as npfrom tensorflow.keras.layers import Flatten, Densefrom keras.models import Modelimport tensorflow.keras.applications as KerasModelsupported_model = np.array([ ['xception', 'Xception'], ['vgg16'原创 2021-08-25 17:00:25 · 223 阅读 · 0 评论 -
Pytorch加载本地CIFAR10数据集
在线下载经常报错,可以预先下载好数据集放到本地。下载数据集(官网页面:http://www.cs.toronto.edu/~kriz/cifar.html 下载地址:http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz),使用IDM很快就下载完了,不要听某些人瞎忽悠去下载还要积分的资源,百度云也大可不必。把cifar-10-python.tar.gz更名为cifar-10-batches-py.tar.gz并放到本地文件夹里,这里放到./data原创 2021-08-24 17:43:46 · 4616 阅读 · 1 评论 -
Python解方程
sympy库用着稍微有点问题,解简单的方程还行,稍微复杂点的结果就不太行,要么打印出了一堆奇怪的东西,要么会运行失败。自己写了一个解方程的函数,原理是穷尽搜索解的值,代码如下。left和right是把等式两边变成函数,x_range是解的搜索范围,step是搜索步长,error是允许的误差。import numpy as npdef solve_equation(left, right, x_range:list, step:float, error:float): result = []原创 2021-08-22 20:44:11 · 754 阅读 · 0 评论 -
Python自加器
import sysMAX_INT = sys.maxsizeclass SelfAdder(): def __init__(self, maximum:int = MAX_INT): self.maximum = maximum self.i = 0 def __call__(self): if self.i == self.maximum: self.i = 1 else:原创 2021-08-19 20:13:35 · 160 阅读 · 0 评论 -
pytorch判断模型是否处于训练状态
使用self.training,这样就可以让forward函数采用两种执行方式,然后就可以做一些骚操作了import torch.nn as nnclass myNet(nn.Module): def __init__(self): super(myNet, self).__init__() def forward(self): if self.training: print('training') else:原创 2021-08-12 15:58:37 · 3743 阅读 · 0 评论 -
查找numpy.ndarray中的重复元素
先转成list,然后再借助count查找(ndarray没有count方法)list= ndarray.tolist()for i in range(len(list)): if list.count(list[i]) > 1: print(list[i])原创 2021-07-27 15:51:23 · 2646 阅读 · 0 评论 -
保存Shap生成的神经网络解释图(shap.image_plot)
保存Shap生成的神经网络解释图(shap.image_plot)调用shap.image_plot后发现使用plt.savefig保存下来的图像为空白图,经过查资料发现这是因为调用plt.show()后会生成新画板。(参考链接:保存plot_如何解决plt.savefig()保存的图片为空白的问题?)找到了一篇介绍如何保存Shap图的博客(原文地址:shap解释模型特征,多张图保存的实现(要改源码)),但是里面并没有提到image_plot怎么处理。此外,前面那个链接里提到的“先在画图前调用myfig原创 2021-06-23 10:49:23 · 8217 阅读 · 5 评论 -
Python查看函数源码
Python查看函数源码有些包的源代码不太好找,IDE可能也没给提供方便的源代码查看方式,这个时候就可以用这个方法。如下:import inspect as istdef getSource(fun): f = open('./' + fun.__name__ + '.py', 'w') f.write(ist.getsource(fun)) f.close调用的时候传入想查看源码的函数就行了,比如import matplotlib.pyplot as pltgetS原创 2021-06-21 16:49:22 · 1692 阅读 · 2 评论 -
ImageDataGenerator读取的数据集转Numpy array
ImageDataGenerator读取的数据集转Numpy array常用的数据集类型可以分为两种:(1)一种是网上的经典数据集,比如mnist,一般会给写好的读取方法,比如mnist.load_data(),读取出来的返回值是Numpy array;(2)一种是自己本地的数据集,路径下每个文件夹代表一类图像,目录结构类似于data--type1----img1-1----img1-2--type2----img2-2----img2-2--type3----img3-2----原创 2021-06-18 17:09:01 · 891 阅读 · 1 评论 -
解决使用ployfit拟合曲线得到折线图(不够光滑)的问题
解决使用ployfit拟合曲线得到折线图(不够光滑)的问题使用polyfit拟合曲线,代码如下import numpy as npimport matplotlib.pyplot as plt #定义x、y散点坐标x = np.arange(0, 5)y = [0.472,0.469,0.447,0.433,0.418] #用3次多项式拟合f1 = np.polyfit(x, y, 3)p1 = np.poly1d(f1)yvals1 = p1(x) #拟合y值 #绘图plo原创 2021-05-03 14:41:24 · 3712 阅读 · 0 评论