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

MD5密码实验——Python实现(完整解析版)

文章目录

  • 更新:
  • 前言
  • 实验环境
  • 实验内容
    • 实验操作步骤
      • 1.初始化四个缓冲区
      • 2.设置常数表、位移位数等参数
      • 3.增加填充
      • 4.分组处理
      • 5.输出处理
    • 实验结果
    • 实验心得
    • 实验代码
      • MD5-Python.py

更新:

感谢评论区的大佬指出错误,现已改进代码
之前的错误在于没有考虑最高位是0的情况
造成某些字符串的MD5加密结果与实际不符
所以对代码作出如下部分修改
原先代码
在这里插入图片描述

现在代码
在这里插入图片描述


前言

实验目的
1)初步了解哈希算法
2)掌握哈希算法MD5的实现


提示:以下是本篇文章正文内容,下面案例可供参考

实验环境

计算机语言:Python
开发环境:Pycharm

实验内容

编程实现MD5算法。

实验操作步骤

编写MD5类
在这里插入图片描述
初始化配置各参数

1.初始化四个缓冲区

在这里插入图片描述
在这里插入图片描述

2.设置常数表、位移位数等参数

在这里插入图片描述
在这里插入图片描述

3.增加填充

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.分组处理

在这里插入图片描述
在这里插入图片描述
分为四个分组,FF,GG,HH,II
每组对消息message的不同单位进行加密

在这里插入图片描述在这里插入图片描述
分组处理,每次循环移动四位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.输出处理

在这里插入图片描述
在这里插入图片描述

实验结果

1.明文:12345678
密文:25d55ad23a80aa4f464c76d713c07ad
在这里插入图片描述
与在线加密结果一致
在这里插入图片描述

2.明文:hello world
密文:5eb63bbbe01eeed093cb22bb8f5acdc3
在这里插入图片描述
与在线加密结果一致
在这里插入图片描述

实验心得

本次实验是MD5算法的编写,通过本次python代码编写实现了加密功能,编写的思路从MD5算法原理出发,通过初始化缓冲区、附加填充位、分组进行加密等步骤,构造类来实现功能,相较于RSA,MD5是不可逆算法,应该会更加安全一些,但我查阅资料后发现并非如此,在线的MD5库可以解密数量巨大的MD5密文,只有在“加盐”过后才会使得破解难度大大增加。

实验代码

MD5-Python.py

# -*- codeding = uft-8 -*-

def int2bin(n, count=24):
    return "".join([str((n >> y) & 1) for y in range(count-1, -1, -1)])

class MD5(object):
    # 初始化密文
    def __init__(self, message):
        self.message = message
        self.ciphertext = ""

        self.A = 0x67452301
        self.B = 0xEFCDAB89
        self.C = 0x98BADCFE
        self.D = 0x10325476
        self.init_A = 0x67452301
        self.init_B = 0xEFCDAB89
        self.init_C = 0x98BADCFE
        self.init_D = 0x10325476
        '''
        self.A = 0x01234567
        self.B = 0x89ABCDEF
        self.C = 0xFEDCBA98
        self.D = 0x76543210
         '''
        #设置常数表T
        self.T = [0xD76AA478,0xE8C7B756,0x242070DB,0xC1BDCEEE,0xF57C0FAF,0x4787C62A,0xA8304613,0xFD469501,
                    0x698098D8,0x8B44F7AF,0xFFFF5BB1,0x895CD7BE,0x6B901122,0xFD987193,0xA679438E,0x49B40821,
                    0xF61E2562,0xC040B340,0x265E5A51,0xE9B6C7AA,0xD62F105D,0x02441453,0xD8A1E681,0xE7D3FBC8,
                    0x21E1CDE6,0xC33707D6,0xF4D50D87,0x455A14ED,0xA9E3E905,0xFCEFA3F8,0x676F02D9,0x8D2A4C8A,
                    0xFFFA3942,0x8771F681,0x6D9D6122,0xFDE5380C,0xA4BEEA44,0x4BDECFA9,0xF6BB4B60,0xBEBFBC70,
                    0x289B7EC6,0xEAA127FA,0xD4EF3085,0x04881D05,0xD9D4D039,0xE6DB99E5,0x1FA27CF8,0xC4AC5665,
                    0xF4292244,0x432AFF97,0xAB9423A7,0xFC93A039,0x655B59C3,0x8F0CCC92,0xFFEFF47D,0x85845DD1,
                    0x6FA87E4F,0xFE2CE6E0,0xA3014314,0x4E0811A1,0xF7537E82,0xBD3AF235,0x2AD7D2BB,0xEB86D391]
        #循环左移位数
        self.s = [7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,
                    5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,
                    4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,
                    6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]
        self.m = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
                    1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12,
                    5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2,
                    0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9]



    # 附加填充位
    def fill_text(self):
        for i in range(len(self.message)):
            c = int2bin(ord(self.message[i]), 8)
            self.ciphertext += c

        if (len(self.ciphertext)%512 != 448):
            if ((len(self.ciphertext)+1)%512 != 448):
                self.ciphertext += '1'
            while (len(self.ciphertext)%512 != 448):
                self.ciphertext += '0'

        length = len(self.message)*8
        if (length <= 255):
            length = int2bin(length, 8)
        else:
            length = int2bin(length, 16)
            temp = length[8:12]+length[12:16]+length[0:4]+length[4:8]
            length = temp

        self.ciphertext += length
        while (len(self.ciphertext)%512 != 0):
            self.ciphertext += '0'

    # 分组处理(迭代压缩)
    def circuit_shift(self, x, amount):
        x &= 0xFFFFFFFF
        return ((x << amount) | (x >> (32 - amount))) & 0xFFFFFFFF

    def change_pos(self):
        a = self.A
        b = self.B
        c = self.C
        d = self.D
        self.A = d
        self.B = a
        self.C = b
        self.D = c

    def FF(self, mj, s, ti):
        mj = int(mj, 2)
        temp = self.F(self.B, self.C, self.D) + self.A + mj + ti
        temp = self.circuit_shift(temp, s)
        self.A = (self.B + temp)%pow(2, 32)
        self.change_pos()

    def GG(self, mj, s, ti):
        mj = int(mj, 2)
        temp = self.G(self.B, self.C, self.D) + self.A + mj + ti
        temp = self.circuit_shift(temp, s)
        self.A = (self.B + temp)%pow(2, 32)
        self.change_pos()

    def HH(self, mj, s, ti):
        mj = int(mj, 2)
        temp = self.H(self.B, self.C, self.D) + self.A + mj + ti
        temp = self.circuit_shift(temp, s)
        self.A = (self.B + temp)%pow(2, 32)
        self.change_pos()

    def II(self, mj, s, ti):
        mj = int(mj, 2)
        temp = self.I(self.B, self.C, self.D) + self.A + mj + ti
        temp = self.circuit_shift(temp, s)
        self.A = (self.B + temp)%pow(2, 32)
        self.change_pos()


    def F(self, X, Y, Z):
        return (X & Y) | ((~X) & Z)
    def G(self, X, Y, Z):
        return (X & Z) | (Y & (~Z))
    def H(self, X, Y, Z):
        return X ^ Y ^ Z
    def I(self, X, Y, Z):
        return Y ^ (X | (~Z))

    def group_processing(self):
        M = []
        for i in range(0, 512, 32):
            num = ""
            # 获取每一段的标准十六进制形式
            for j in range(0, len(self.ciphertext[i:i+32]), 4):
                temp = self.ciphertext[i:i+32][j:j + 4]
                temp = hex(int(temp, 2))
                num += temp[2]
            # 对十六进制进行小端排序
            num_tmp = ""
            for j in range(8, 0, -2):
                temp = num[j-2:j]
                num_tmp += temp

            num = ""
            for i in range(len(num_tmp)):
                num += int2bin(int(num_tmp[i], 16), 4)
            M.append(num)

        #print(M)



        for j in range(0, 16, 4):
            self.FF(M[self.m[j]], self.s[j], self.T[j])
            self.FF(M[self.m[j+1]], self.s[j+1], self.T[j+1])
            self.FF(M[self.m[j+2]], self.s[j+2], self.T[j+2])
            self.FF(M[self.m[j+3]], self.s[j+3], self.T[j+3])

        for j in range(0, 16, 4):
            self.GG(M[self.m[16+j]], self.s[16+j], self.T[16+j])
            self.GG(M[self.m[16+j+1]], self.s[16+j+1], self.T[16+j+1])
            self.GG(M[self.m[16+j+2]], self.s[16+j+2], self.T[16+j+2])
            self.GG(M[self.m[16+j+3]], self.s[16+j+3], self.T[16+j+3])


        for j in range(0, 16, 4):
            self.HH(M[self.m[32+j]], self.s[32+j], self.T[32+j])
            self.HH(M[self.m[32+j+1]], self.s[32+j+1], self.T[32+j+1])
            self.HH(M[self.m[32+j+2]], self.s[32+j+2], self.T[32+j+2])
            self.HH(M[self.m[32+j+3]], self.s[32+j+3], self.T[32+j+3])


        for j in range(0, 16, 4):
            self.II(M[self.m[48+j]], self.s[48+j], self.T[48+j])
            self.II(M[self.m[48+j+1]], self.s[48+j+1], self.T[48+j+1])
            self.II(M[self.m[48+j+2]], self.s[48+j+2], self.T[48+j+2])
            self.II(M[self.m[48+j+3]], self.s[48+j+3], self.T[48+j+3])

        self.A = (self.A+self.init_A)%pow(2, 32)
        self.B = (self.B+self.init_B)%pow(2, 32)
        self.C = (self.C+self.init_C)%pow(2, 32)
        self.D = (self.D+self.init_D)%pow(2, 32)

        """
        print("A:{}".format(hex(self.A)))
        print("B:{}".format(hex(self.B)))
        print("C:{}".format(hex(self.C)))
        print("D:{}".format(hex(self.D)))
        """


        answer = ""
        for register in [self.A, self.B, self.C, self.D]:
            if len(hex(register))!=10:
                str1 = list(hex(register))
                str1.insert(2,'0')
                str2 = ''.join(str1)
                register = str2[2:]
            else:
                register = hex(register)[2:]
            for i in range(8, 0, -2):
                answer += str(register[i-2:i])

        return answer



message = input("输入要加密的字符串:")
MD5 = MD5(message)
MD5.fill_text()
result = MD5.group_processing()
print("32位小写MD5加密:{}".format(result))

相关文章:

如何在vscode中下载python第三方库(jieba和wordcloud为例)

本文由来 本来我并不想写文章的&#xff0c;但是我发现&#xff0c;对于一个0基础的小白vscode用户而言&#xff0c;想完整的下载一个第三方库还是存在一定的问题&#xff0c;并且我在搜索文章的时候发现&#xff0c;完全没有小白教程&#xff0c;太难了&#xff0c;所以说我就…...

python安装使用pip安装numpy

相信大家最近都在忙&#xff0c;因为到开学和上班的时候了&#xff0c;我最近也很忙&#xff0c;忙的快要流泪&#xff0c;这不是要考计算机三级了吗&#xff01;买了好厚一本书&#xff0c;备战过程中&#xff0c;最近洗头一次掉了100根不止的头发&#xff0c;有点恐惧&#x…...

yolov5ds-断点训练、继续训练、先终止训练并调整最终epoch(yolov5同样适用)

目录参考链接1. 训练过程中中断了&#xff0c;继续训练如果觉得数值差不多稳定了&#xff0c;但是距离最终设置的epoch还很远&#xff0c;所以想要停止训练但是又得到yolov5在运行完指定最大epoch后生成的一系列map、混淆矩阵等图2. 训练完原有epoch&#xff0c;但还继续训练&a…...

openCV第一篇

文章目录 前言&#xff1a;计算机眼中的图片 1. 图片的读取与显示 1.1 图片的读取 1.2 显示的图片 1.2.1 显示原始图片 1.2.2 灰度图 1.3 BGR转换成灰度图、RGB 2. 保存图片 3. 视频的读取与显示 4. 截取图像部分 5. 颜色通道提取 6. 边界填充 7. 数值计算 8.…...

基于Python构建机器学习Web应用

目录 一、内容介绍 1.Onnx模型 ①skl2onnx库安装 2.Netron安装 二、模型构建 1.数据加载 2.划分可训练特征与预测标签 3.训练模型 ①第三方库导入 ②数据集划分 ③SVC模型构建 ④精度评价 二、模型转换及可视化 1.参数配置 2.Onnx模型生成 3.可视化模型 四、构…...

python - 密码加密与解密

Python之密码加密与解密 - 对称算法一、对称加密1.1 安装第三方库 - PyCrypto1.2 加密实现二、非对称加密三、摘要算法3.1 md5加密3.2 sha1加密3.3 sha256加密3.4 sha384加密3.5 sha512加密3.6 “加盐”加密由于计算机软件的非法复制&#xff0c;通信的泄密、数据安全受到威胁。…...

百度飞桨PaddleSpeech的简单使用

PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库&#xff0c;用于语音和音频中的各种关键任务的开发&#xff0c;包含大量基于深度学习前沿和有影响力的模型&#xff0c;一些典型的应用示例如下&#xff1a;语音识别、语音翻译 (英译中)、语音合成、标点恢复等。…...

Python数据标准化

目录 一.数据标准化方式 1.实现中心化和正态分布的Z-Score 2.实现归一化的Max-Min 3.用于稀疏数据的MaxAbs 4.针对离群点的RobustScaler 二.Python针对以上几种标准化方法处理数据 三.总结 一.数据标准化方式 1.实现中心化和正态分布的Z-Score Z-Score标准化是基于原…...

Pycharm无法下载汉化包,一招教你搞定

Pycharm无法下载汉化包&#xff0c;一招教你搞定Pycharm直接导入汉化包Pycharm 无法采用自带的插件安装汉化包Pycharm直接导入汉化包 Pycharm 是可以直接导入汉化包的&#xff0c;这为很多初学者省区了不少麻烦。具体就是&#xff1a; 1&#xff1a;点击pycharm界面右上角的设…...

python成功实现“高配版”王者小游戏?【赠源码】

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 本游戏完整源码、素材: 点击此处跳转文末名片获取 咳咳&#xff0c;又是一款新的小游戏&#xff0c;就是大家熟悉的王者~ 来看我用python来实现高&#xff08;di&#xff09;配版的王者 是一款拿到代码运行后&#xff0c;…...

【项目实战】Python实现多元线性回归模型(statsmodels OLS算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 回归问题是一类预测连续值的问题&#xff0c;而能满足这样要求的数学模型称作回归模型&#xff0c;本项…...

graphviz安装教程(2022最新版)初学者适用

1、首先在官网下载graphviz 下载网址&#xff1a;https://www.graphviz.org/download/ 2、安装。 打开第一步已经下载好的软件。点击下一步&#xff0c;在安装路径选择时可将安装路径修改为 D:\graphviz 接着一直点下一步&#xff0c;即可安装完成。 3、配置环境变量 右键…...

【Windows】搭建Pytorch环境(GPU版本,含CUDA、cuDNN),并在Pycharm上使用(零基础小白向)

文章目录前言一、安装CUDA1、检查电脑是否支持CUDA2、下载并安装CUDA3、下载并安装cuDNN二、安装Pytorch1、安装Anaconda2、切换清华镜像源3、创建环境并激活4、输入Pytorch安装命令5、测试三、在Pycharm上使用搭建好的环境参考文章前言 本人纯python小白&#xff0c;第一次使用…...

Tensorflow与CUDA、cudnn版本对应关系

不同版本的Tensorflow需对应不同的CUDA和cudnn版本&#xff0c;否者容易安装失败。可按下图所示&#xff0c;根据想要安装的Tensorflow版本&#xff0c;选择对应版本的CUDA和cudnn。 其中CUDA的下载链接为&#xff1a; CUDA Toolkit Archive | NVIDIA Developer cudnn下载链…...

ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing.py)

报错背景&#xff1a; 因为安装tensorflow-gpu版本需要&#xff0c;我把原来的新建的anaconda环境&#xff08;我的名为tensorflow&#xff09;中的python3.8降为了3.7。 在导入seaborn包时&#xff0c;出现了以下错误&#xff1a; ImportError: cannot import name Literal …...

100天精通Python(数据分析篇)——第67天:Pandas数据连接、合并、加入、添加、重构函数(merge、concat、join、append、stack、unstack)

文章目录 一、数据连接(pd.merge)1. left、right2. how3. on4. left_on、right_on5. sort6. suffixes7. left_index、right_index二、数据合并(pd.concat)1. index 没有重复的情况2. index 有重复的情况3. DataFrame合并时同时查看行索引和列索引有无重复三、数据加入(pd.…...

yolov5 优化系列(三):修改损失函数

1.使用 Focal loss 在util/loss.py中&#xff0c;computeloss类用于计算损失函数 # Focal lossg h[fl_gamma] # focal loss gammaif g > 0:BCEcls, BCEobj FocalLoss(BCEcls, g), FocalLoss(BCEobj, g)其中这一段就是开启Focal loss的关键&#xff01;&#xff01;&…...

Python中数组切片的用法详解

Python中数组切片的用法详解一、python中“::-1”代表什么&#xff1f;二、python中“:”的用法三、python中数组切片三、numpy中的整数数组索引四、numpy中借助【切片 : 或 …与索引数组】组合进行复杂切片五、布尔索引六、花式索引一、python中“::-1”代表什么&#xff1f; …...

python 安装whl文件

前言 WHL文件是以Wheel格式保存的Python安装包&#xff0c;Wheel是Python发行版的标准内置包格式。在本质上是一个压缩包&#xff0c;WHL文件中包含了Python安装的py文件和元数据&#xff0c;以及经过编译的pyd文件&#xff0c;这样就使得它可以在不具备编译环境的条件下&#…...

Pycharm中安装pytorch

配置虚拟环境 为什么要安装虚拟环境&#xff1f;虚拟环境&#xff1a;把一部分内容独立出来&#xff0c;称之为容器。在容器中&#xff0c;安装我们自己想要的东西&#xff0c;比如不容版本的依赖包。各容器之间相互独立&#xff0c;互不影响。比如下载完 Anaconda 之后&#…...

Package | 解决 module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘

. 问题背景 由于这个问题出现了两回&#xff0c;决定记录一下。实验背景是使用opencv python库进行数据预处理&#xff0c;遇到报错信息如下&#xff1a; “ import cv2 File “/opt/conda/lib/python3.8/site-packages/cv2/init.py”, line 181, in bootstrap() File “/op…...

如何在项目中搭建python接口自动化框架?

文章目录前言一、框架目录介绍1、common模块读取Excel代码读取yaml代码&#xff08;支持场景关联&#xff09;jsonpath断言封装代码requests二次封装&#xff08;get、post&#xff09;configparser读取配置文件递归遍历字典常用方法log日志封装2、conf模块3、data模块4、case模…...

应用统计432考研复试复试提问总结精简版【一】

一、区间估计与假设检验的联系与区别 联系&#xff1a;二者利用样本进行推断&#xff0c;都属于推断统计区别&#xff1a; 原理&#xff1a; 前者是基于大概率&#xff0c;后者基于小概率&#xff1b;统计量&#xff1a;前者是构造枢轴量&#xff08;不含未知参数&#xff0c;…...

Pytorch模型量化

在深度学习中&#xff0c;量化指的是使用更少的bit来存储原本以浮点数存储的tensor&#xff0c;以及使用更少的bit来完成原本以浮点数完成的计算。这么做的好处主要有如下几点&#xff1a; 更少的模型体积&#xff0c;接近4倍的减少&#xff1b;可以更快的计算&#xff0c;由于…...

已解决Encountered error while trying to install package.> lxml

已解决&#xff08;pip安装第三方模块lxml模块报错&#xff09;Building wheels for collected packages: lxml Building wheel for lxml (setup.py) … error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully. note: This error o…...

距离度量 —— 闵可夫斯基距离(Minkowski Distance)

Python学习系列文章&#xff1a;&#x1f449; 目录 &#x1f448; 文章目录一、概述二、计算公式1. 闵氏距离公式2. 闵氏距离的参数 p3. 闵氏距离的缺点一、概述 闵可夫斯基距离 (Minkowski Distance)&#xff0c;也被称为 闵氏距离。它不仅仅是一种距离&#xff0c;而是将多…...

python(模块)xlwt

目录一、xlwt简介二、xlwt语法1、模块安装2、模块导入3、向xls文件中写入内容4、设置写入文件的格式4.1 字体设置&#xff08;font&#xff09;4.2 背景颜色设置&#xff08;pattern&#xff09;4.3 边框设置&#xff08;borders&#xff09;4.4 对齐方式设置&#xff08;align…...

Pytorch中torch.unsqueeze()和torch.squeeze()函数解析

一. torch.squeeze()函数解析 1. 官网链接 torch.squeeze()&#xff0c;如下图所示&#xff1a; 2. torch.squeeze()函数解析 torch.squeeze(input, dimNone, outNone) squeeze()函数的功能是维度压缩。返回一个tensor&#xff08;张量&#xff09;&#xff0c;其中 input…...

python绘制相关系数热力图

python绘制相关系数热力图一.数据说明和需要安装的库二.准备绘图三.设置配色&#xff0c;画出多幅图全部代码&#xff1a;本文讲述如何利用python绘制如上的相关系数热力图一.数据说明和需要安装的库 数据是31个省市有关教育的12个指标&#xff0c;如下所示。&#xff0c;在文…...

DeepSpeed使用指南(简略版)

现在的模型越来越大&#xff0c;动辄几B甚至几百B。但是显卡显存大小根本无法支撑训练推理。例如&#xff0c;一块RTX2090的10G显存&#xff0c;光把模型加载上去&#xff0c;就会OOM&#xff0c;更别提后面的训练优化。 作为传统pytorch Dataparallel的一种替代&#xff0c;D…...

【Python】tqdm 介绍与使用

文章目录一、tqdm 简介二、tqdm 使用1. 基于迭代对象运行: tqdm(iterator)2. tqdm(list)3. trange(i)4. 手动更新参考链接一、tqdm 简介 tqdm 是一个快速&#xff0c;可扩展的 Python 进度条&#xff0c;可以在 Python 长循环中添加一个进度提示信息&#xff0c;用户只需要封装…...

Pytorch机器学习(十)—— 目标检测中k-means聚类方法生成锚框anchor

Pytorch机器学习&#xff08;十&#xff09;—— YOLO中k-means聚类方法生成锚框anchor 目录 Pytorch机器学习&#xff08;十&#xff09;—— YOLO中k-means聚类方法生成锚框anchor 前言 一、K-means聚类 k-means代码 k-means算法 二、YOLO中使用k-means聚类生成anchor 读取VO…...

Python的占位格式符

对于print函数里的语句 print("我的名字是%s, 年龄是%d"%(name, age)) 中的%s和%d叫做占位符&#xff0c;它们的完整形态是 %[(name)][flags][width][.precision]typecode 其中带有[]的前缀都是可以省略的。 [(name)]: (name)表示, 根据, 制定的名称(…...

关于sklearn库的安装

对于安装sklearn真的是什么问题都被我遇到了 例如pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hostfiles.pythonhosted.org, port443): Read timed out.遇到了 这种也遇到了Requirement already satisfied: numpy in c:\users\yjq\appdata\roamin…...

accuracy_score函数

1.acc计算原理 sklearn中accuracy_score函数计算了准确率。 在二分类或者多分类中&#xff0c;预测得到的label&#xff0c;跟真实label比较&#xff0c;计算准确率。 在multilabel&#xff08;多标签问题&#xff09;分类中&#xff0c;该函数会返回子集的准确率。如果对于一…...

怎么成为稚晖君?

如何成为IT大佬稚晖君——电子系统设计应具备的基本技能和方法论 快速提高电子技术的必经之路_一些老生常谈的道理 嵌入式AI入坑经历 稚晖君软件硬件开发环境总结 首先&#xff0c;机器学习深度学习这些和硬件是两个领域的内容&#xff0c;个人不建议一起学&#xff0c;注意力…...

Pandas库

Pandas是python第三方库&#xff0c;提供高性能易用数据类型和分析工具。Pandas基于NumPy实现&#xff0c;常与NumPy和Matplotlib一同使用。pandas库引用&#xff1a; import pandas as pd 包括两个数据类型&#xff1a;Series&#xff08;相当于一维数据类型&#xff09;&…...

通过两道一年级数学题反思自己

背景 做完这两道题我开始反思自己&#xff0c;到底是什么限制了我&#xff1f;是我自己&#xff1f;是曾经教导我的老师&#xff1f;还是我的父母&#xff1f; 是考试吗&#xff1f;还是什么&#xff1f; 提目 1、正方体个数问题 2、相碰可能性 过程 静态思维&#xff1a; …...

深度学习—卷积神经网络(CNN)全笔记,附代码

本文内容为哔站学习笔记【卷积神经网络-CNN】深度学习&#xff08;唐宇迪带你学AI&#xff09;&#xff1a;卷积神经网络理论详解与项目实战&#xff0c;计算机视觉&#xff0c;图像识别模块实战_哔哩哔哩_bilibili 目录 深度学习基础 什么是深度学习&#xff1f; 机器学习流…...

Building wheel for mmcv-full (setup.py) ... error解决办法!

mmdetection 安装后&#xff0c;根据官方给的程序安装mmcv时&#xff0c;出现&#xff1a;Building wheel for mmcv-full (setup.py) … error 环境&#xff1a;CUDA11.3, Pytorch1.11 安装根据官网给的安装程序&#xff1a;pip install mmcv-full -f https://download.openmm…...

联邦学习开山之作代码解读与收获

参考&#xff1a;联邦学习代码解读&#xff0c;超详细_一只揪的博客-CSDN博客_联邦学习代码 参考文献&#xff1a;[1602.05629] Communication-Efficient Learning of Deep Networks from Decentralized Data (arxiv.org) 参考代码&#xff1a;GitHub - AshwinRJ/Federated-L…...

Python安装第三方库常用方法 超详细~

Python安装第三方库常用方法前言安装方法1. 通过pychram安装2. pip安装大法3. 下载whl文件到本地离线安装3.1 补充4.其他方法4.1 Python官方的Pypi菜单4.2 国内镜像源解决pip安装过慢的问题小结前言 在pyhton的学习中&#xff0c;相信大家通常都会碰到第三方库的安装问题&…...

Python--找出字符串中出现次数最多的字符及其出现的次数

方法一&#xff1a; 1、循环遍历列表或字符串&#xff0c;如果字符在字典中则值加1&#xff0c;如果不在则创建&#xff08;key,value) 2、找到字典中&#xff0c;最大的value值 3、根据最大的value值&#xff0c;找对应的key值&#xff0c;打印出出现次数最多的字符 str &qu…...

滤波笔记一:卡尔曼滤波(Kalman Filtering)详解

本笔记是总结了B站DR_CAN的卡尔曼滤波器的课程&#xff0c;他的B站主页为&#xff1a;DR_CAN的个人空间_哔哩哔哩_bilibili PS:虽然我不是学自控的&#xff0c;但是老师真的讲的很好&#xff01; 目录 Lesson1 递归算法 Lesson2 数学基础_数据融合_协方差矩阵_状态空间方程…...

利用Python求斐波那契数列的第N项以及前N项和(循环、递归、集合)

著名的斐波那契数列&#xff0c;即从第三项开始&#xff0c;每一项都等于前两项之和。 之前写过利用Java语言来编写&#xff0c;由于最近正在学Python&#xff0c;所以将自己的想法记录在此&#xff0c;有需要的朋友可以参考一下。 写在前面&#xff1a;这里的三个方法其实思…...

一文速学(十八)-数据分析之Pandas处理文本数据(str/object)各类操作+代码一文详解(三)

目录 前言 一、子串提取 提取匹配首位子串 提取所有匹配项(extractall)...

Python数据分析-数据预处理

数据预处理 文章目录数据预处理1.前言2.数据探索2.1缺失值分析2.2 异常值分析2.2.1 简单统计量分析2.2.2 3$\sigma$原则2.2.3 箱线图分析2.3 一致性分析2.4 相关性分析3.数据预处理3.1 数据清洗3.1.1 缺失值处理3.1.2 异常值处理3.2 数据集成3.2.1 实体识别3.2.2 冗余属性识别3…...

【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战

&#x1f366;&#x1f366;写这篇AES文章也是有件趣事&#xff0c;有位小伙伴发了段密文&#xff0c;看看谁解密速度快&#xff0c;学过Python的小伙伴一下子就解开来了&#xff0c;内容也挺有趣的。 &#x1f35f;&#x1f35f;原来加解密也可以这么有趣&#xff0c;虽然看起…...

朴素贝叶斯模型及案例(Python)

目录 1 朴素贝叶斯的算法原理 2 一维特征变量下的贝叶斯模型 3 二维特征变量下的贝叶斯模型 4 n维特征变量下的贝叶斯模型 5 朴素贝叶斯模型的sklearn实现 6 案例&#xff1a;肿瘤预测模型 6.1 读取数据与划分 6.1.1 读取数据 6.1.2 划分特征变量和目标变量 6.2 模型…...

python之Tkinter详解

Python之Tkinter详解 文章目录Python之Tkinter详解1、Tkinter是什么2、Tkinter创建窗口①导入 tkinter的库 &#xff0c;创建并显示窗口②修改窗口属性③创建按钮④窗口内的组件布局3、Tkinter布局用法①基本界面、label(标签)和button(按钮)用法②entry(输入)和text(文本)用法…...