用Python实现自动扫雷!

python扫雷游戏代码 用python,编写扫雷游戏代码 阅读详情

0. 预览

用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。

中级 - 0.74秒 3BV/S=60.81

相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。

扫雷作为一款在Windows9x时代就已经诞生的经典游戏,从过去到现在依然都有着它独特的魅力:快节奏高精准的鼠标操作要求、快速的反应能力、刷新纪录的快感,这些都是扫雷给雷友们带来的、只属于扫雷的独一无二的兴奋点。

1.准备

准备动手制作一套扫雷自动化软件之前,你需要准备如下一些工具/软件/环境

开发环境

  • Python3 环境 - 推荐3.6或者以上 [更加推荐Anaconda3,以下很多依赖-库无需安装]

  • Numpy依赖库 [如有Anaconda则无需安装]

  • PIL依赖库 [如有Anaconda则无需安装]

  • Opencv-python

  • Win32gui、win32api依赖库

  • 支持Python的IDE [可选,如果你能忍受用文本编辑器写程序也可以]

扫雷软件

Minesweeper Arbiter(必须使用MS-Arbiter来进行扫雷!)

好啦,那么我们的准备工作已经全部完成了!让我们开始吧~

2.实现思路

在去做一件事情之前最重要的是什么?是将要做的这件事情在心中搭建一个步骤框架。只有这样,才能保证在去做这件事的过程中,尽可能的做到深思熟虑,使得最终有个好的结果。我们写程序也要尽可能做到在正式开始开发之前,在心中有个大致的思路。

对于本项目而言,大致的开发过程是这样的:

  • 完成窗体内容截取部分

  • 完成雷块分割部分

  • 完成雷块类型识别部分

  • 完成扫雷算法

好啦,既然我们有了个思路,那就撸起袖子大力干!

01 窗体截取

其实对于本项目而言,窗体截取是一个逻辑上简单,实现起来却相当麻烦的部分,而且还是必不可少的部分。我们通过Spy++得到了以下两点信息:



class\_name = "TMain"  
title\_name = "Minesweeper Arbiter "  



  • ms_arbiter.exe的主窗体类别为"TMain"

  • ms_arbiter.exe的主窗体名称为"Minesweeper Arbiter "

注意到了么?主窗体的名称后面有个空格。正是这个空格让笔者困扰了一会儿,只有加上这个空格,win32gui才能够正常的获取到窗体的句柄。

本项目采用了win32gui来获取窗体的位置信息,具体代码如下:

hwnd = win32gui.FindWindow(class\_name, title\_name)  
if hwnd:  
left, top, right, bottom = win32gui.GetWindowRect(hwnd)  

通过以上代码,我们得到了窗体相对于整块屏幕的位置。之后我们需要通过PIL来进行扫雷界面的棋盘截取。

我们需要先导入PIL库

from PIL import ImageGrab  

然后进行具体的操作。

left += 15  
top += 101  
right -= 15  
bottom -= 43  
  
rect = (left, top, right, bottom)  
img = ImageGrab.grab().crop(rect)  



聪明的你肯定一眼就发现了那些奇奇怪怪的Magic Numbers,没错,这的确是Magic Numbers,是我们通过一点点细微调节得到的整个棋盘相对于窗体的位置。

注意:这些数据仅在Windows10下测试通过,如果在别的Windows系统下,不保证相对位置的正确性,因为老版本的系统可能有不同宽度的窗体边框。

橙色的区域是我们所需要的

橙色的区域是我们所需要的 好啦,棋盘的图像我们有了,下一步就是对各个雷块进行图像分割了~

02 雷块分割

在进行雷块分割之前,我们事先需要了解雷块的尺寸以及它的边框大小。经过笔者的测量,在ms_arbiter下,每一个雷块的尺寸为16px*16px。

知道了雷块的尺寸,我们就可以进行每一个雷块的裁剪了。首先我们需要知道在横和竖两个方向上雷块的数量。


block\_width, block\_height = 16, 16  
  blocks\_x = int((right - left) / block\_width)  
  blocks\_y = int((bottom - top) / block\_height)  

之后,我们建立一个二维数组用于存储每一个雷块的图像,并且进行图像分割,保存在之前建立的数组中。

def crop\_block(hole\_img, x, y):  
        x1, y1 = x \* block\_width, y \* block\_height  
        x2, y2 = x1 + block\_width, y1 + block\_height  
return hole\_img.crop((x1, y1, x2, y2))  
  
blocks\_img = \[\[0 for i in range(blocks\_y)\] for i in range(blocks\_x)\]  
  
for y in range(blocks\_y):  
for x in range(blocks\_x):  
        blocks\_img\[x\]\[y\] = crop\_block(img, x, y)  

将整个图像获取、分割的部分封装成一个库,随时调用就OK啦~在笔者的实现中,我们将这一部分封装成了imageProcess.py,其中函数get_frame()用于完成上述的图像获取、分割过程。

03 雷块识别

这一部分可能是整个项目里除了扫雷算法本身之外最重要的部分了。笔者在进行雷块检测的时候采用了比较简单的特征,高效并且可以满足要求。

def analyze\_block(self, block, location):  
    block = imageProcess.pil\_to\_cv(block)  
  
    block\_color = block\[8, 8\]  
    x, y = location\[0\], location\[1\]  
  
    # -1:Not opened  
    # -2:Opened but blank  
    # -3:Un initialized  
  
    # Opened  
if self.equal(block\_color, self.rgb\_to\_bgr((192, 192, 192))):  
if not self.equal(block\[8, 1\], self.rgb\_to\_bgr((255, 255, 255))):  
self.blocks\_num\[x\]\[y\] = -2  
self.is\_started = True  
else:  
self.blocks\_num\[x\]\[y\] = -1  
  
    elif self.equal(block\_color, self.rgb\_to\_bgr((0, 0, 255))):  
self.blocks\_num\[x\]\[y\] = 1  
  
    elif self.equal(block\_color, self.rgb\_to\_bgr((0, 128, 0))):  
self.blocks\_num\[x\]\[y\] = 2  
  
    elif self.equal(block\_color, self.rgb\_to\_bgr((255, 0, 0))):  
self.blocks\_num\[x\]\[y\] = 3  
  
    elif self.equal(block\_color, self.rgb\_to\_bgr((0, 0, 128))):  
self.blocks\_num\[x\]\[y\] = 4  
  
    elif self.equal(block\_color, self.rgb\_to\_bgr((128, 0, 0))):  
self.blocks\_num\[x\]\[y\] = 5  
  
    elif self.equal(block\_color, self.rgb\_to\_bgr((0, 128, 128))):  
self.blocks\_num\[x\]\[y\] = 6  
  
    elif self.equal(block\_color, self.rgb\_to\_bgr((0, 0, 0))):  
if self.equal(block\[6, 6\], self.rgb\_to\_bgr((255, 255, 255))):  
            # Is mine  
self.blocks\_num\[x\]\[y\] = 9  
        elif self.equal(block\[5, 8\], self.rgb\_to\_bgr((255, 0, 0))):  
            # Is flag  
self.blocks\_num\[x\]\[y\] = 0  
else:  
self.blocks\_num\[x\]\[y\] = 7  
  
    elif self.equal(block\_color, self.rgb\_to\_bgr((128, 128, 128))):  
self.blocks\_num\[x\]\[y\] = 8  
else:  
self.blocks\_num\[x\]\[y\] = -3  
self.is\_mine\_form = False  
  
if self.blocks\_num\[x\]\[y\] == -3 or not self.blocks\_num\[x\]\[y\] == -1:  
self.is\_new\_start = False  

可以看到,我们采用了读取每个雷块的中心点像素的方式来判断雷块的类别,并且针对插旗、未点开、已点开但是空白等情况进行了进一步判断。

具体色值是笔者直接取色得到的,并且屏幕截图的色彩也没有经过压缩,所以通过中心像素结合其他特征点来判断类别已经足够了,并且做到了高效率。

在本项目中,我们实现的时候采用了如下标注方式:

  • 1-8:表示数字1到8

  • 9:表示是地雷

  • 0:表示插旗

  • -1:表示未打开

  • -2:表示打开但是空白

  • -3:表示不是扫雷游戏中的任何方块类型

通过这种简单快速又有效的方式,我们成功实现了高效率的图像识别。

04 扫雷算法实现

这可能是本篇文章最激动人心的部分了。在这里我们需要先说明一下具体的扫雷算法思路:

  • 遍历每一个已经有数字的雷块,判断在它周围的九宫格内未被打开的雷块数量是否和本身数字相同,如果相同则表明周围九宫格内全部都是地雷,进行标记。

  • 再次遍历每一个有数字的雷块,取九宫格范围内所有未被打开的雷块,去除已经被上一次遍历标记为地雷的雷块,记录并且点开。

  • 如果以上方式无法继续进行,那么说明遇到了死局,选择在当前所有未打开的雷块中随机点击。(当然这个方法不是最优的,有更加优秀的解决方案,但是实现相对麻烦)

基本的扫雷流程就是这样,那么让我们来亲手实现它吧~

首先我们需要一个能够找出一个雷块的九宫格范围的所有方块位置的方法。因为扫雷游戏的特殊性,在棋盘的四边是没有九宫格的边缘部分的,所以我们需要筛选来排除掉可能超过边界的访问。


def generate\_kernel(k, k\_width, k\_height, block\_location):  
  
     ls = \[\]  
     loc\_x, loc\_y = block\_location\[0\], block\_location\[1\]  
  
for now\_y in range(k\_height):  
for now\_x in range(k\_width):  
if k\[now\_y\]\[now\_x\]:  
                 rel\_x, rel\_y = now\_x - 1, now\_y - 1  
                 ls.append((loc\_y + rel\_y, loc\_x + rel\_x))  
return ls  
  
 kernel\_width, kernel\_height = 3, 3  
  
# Kernel mode:\[Row\]\[Col\]  
 kernel = \[\[1, 1, 1\], \[1, 1, 1\], \[1, 1, 1\]\]  
  
# Left border  
if x == 0:  
for i in range(kernel\_height):  
         kernel\[i\]\[0\] = 0  
  
# Right border  
if x == self.blocks\_x - 1:  
for i in range(kernel\_height):  
         kernel\[i\]\[kernel\_width - 1\] = 0  
  
# Top border  
if y == 0:  
for i in range(kernel\_width):  
         kernel\[0\]\[i\] = 0  
  
# Bottom border  
if y == self.blocks\_y - 1:  
for i in range(kernel\_width):  
         kernel\[kernel\_height - 1\]\[i\] = 0  
  
# Generate the search map  
 to\_visit = generate\_kernel(kernel, kernel\_width, kernel\_height, location)  

我们在这一部分通过检测当前雷块是否在棋盘的各个边缘来进行核的删除(在核中,1为保留,0为舍弃),之后通过generate_kernel函数来进行最终坐标的生成。


def count\_unopen\_blocks(blocks):  
    count = 0  
for single\_block in blocks:  
if self.blocks\_num\[single\_block\[1\]\]\[single\_block\[0\]\] == -1:  
            count += 1  
return count  
  
def mark\_as\_mine(blocks):  
for single\_block in blocks:  
if self.blocks\_num\[single\_block\[1\]\]\[single\_block\[0\]\] == -1:  
self.blocks\_is\_mine\[single\_block\[1\]\]\[single\_block\[0\]\] = 1  
  
unopen\_blocks = count\_unopen\_blocks(to\_visit)  
if unopen\_blocks == self.blocks\_num\[x\]\[y\]:  
     mark\_as\_mine(to\_visit)  

在完成核的生成之后,我们有了一个需要去检测的雷块“地址簿”:to_visit。之后,我们通过count_unopen_blocks函数来统计周围九宫格范围的未打开数量,并且和当前雷块的数字进行比对,如果相等则将所有九宫格内雷块通过mark_as_mine函数来标注为地雷。


def mark\_to\_click\_block(blocks):  
for single\_block in blocks:  
  
# Not Mine  
if not self.blocks\_is\_mine\[single\_block\[1\]\]\[single\_block\[0\]\] == 1:  
# Click-able  
if self.blocks\_num\[single\_block\[1\]\]\[single\_block\[0\]\] == -1:  
  
# Source Syntax: \[y\]\[x\] - Converted  
if not (single\_block\[1\], single\_block\[0\]) in self.next\_steps:  
self.next\_steps.append((single\_block\[1\], single\_block\[0\]))  
  
def count\_mines(blocks):  
    count = 0  
for single\_block in blocks:  
if self.blocks\_is\_mine\[single\_block\[1\]\]\[single\_block\[0\]\] == 1:  
            count += 1  
return count  
  
mines\_count = count\_mines(to\_visit)  
  
if mines\_count == block:  
    mark\_to\_click\_block(to\_visit)  

扫雷流程中的第二步我们也采用了和第一步相近的方法来实现。先用和第一步完全一样的方法来生成需要访问的雷块的核,之后生成具体的雷块位置,通过count_mines函数来获取九宫格范围内所有雷块的数量,并且判断当前九宫格内所有雷块是否已经被检测出来。

如果是,则通过mark_to_click_block函数来排除九宫格内已经被标记为地雷的雷块,并且将剩余的安全雷块加入next_steps数组内。


# Analyze the number of blocks  
self.iterate\_blocks\_image(BoomMine.analyze\_block)  
  
# Mark all mines  
self.iterate\_blocks\_number(BoomMine.detect\_mine)  
  
# Calculate where to click  
self.iterate\_blocks\_number(BoomMine.detect\_to\_click\_block)  
  
if self.is\_in\_form(mouseOperation.get\_mouse\_point()):  
for to\_click in self.next\_steps:  
         on\_screen\_location = self.rel\_loc\_to\_real(to\_click)  
         mouseOperation.mouse\_move(on\_screen\_location\[0\], on\_screen\_location\[1\])  
         mouseOperation.mouse\_click()  

在最终的实现内,笔者将几个过程都封装成为了函数,并且可以通过iterate_blocks_number方法来对所有雷块都使用传入的函数来进行处理,这有点类似Python中Filter的作用。

4. 学习资源推荐

除了上述分享,如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。

这里给大家展示一下我进的兼职群和最近接单的截图

私单

😝朋友们如果有需要的话,可以 V扫描下方二维码联系领取,也可以内推兼职群哦~

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python学习路线

image-20230619144606466

python学习路线图1

二、Python基础学习
1. 开发工具

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

五、Python面试集锦
1. 面试资料

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

因篇幅有限,仅展示部分资料,添加上方即可获取👆

------ 🙇‍♂️ 本文转自网络,如有侵权,请联系删除 🙇‍♂️ ------
Python游戏:扫雷 (附源码) 这次我们基于 pygame 来做一个扫雷,我所有的代码都是基于 python 3.6 的 阅读详情

相关推荐

Python实现扫雷游戏,代码示例,边玩边学+回忆童年!

扫雷是一款益智类小游戏,最早于 1992 年由微软在 Windows 上发行,游戏适合于全年龄段,规则简单,即在最短的时间内找出所有非雷格子且在中间过程中不能踩到雷, 踩到雷则失败,需重新开始。本文我们使用 Python 来实现扫雷游戏,主要用的 Python 库是 pygame。本文我们通过 Python 简单的实现了扫雷游戏,大家有兴趣的话,可以实际操作一下,看看自己能否排除全部的雷。

2301_80240808的博客 3068

Python-扫雷游戏【附完整源码】

《扫雷》是一款大众类的益智小游戏,游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。这个游戏的玩法很简单,雷区中随机布置一定数量的地雷,玩家需要尽快找出所有不是地雷的方块;如果玩家翻开的方块有地雷,则游戏结束

qiao_yue的博客 6797

Python+OpenCV实现自动扫雷,挑战扫雷世界记录!_opencv 自动扫雷

我们一起来玩扫雷吧。用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。中级 - 0.74秒 3BV/S=60.81相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。扫雷作为一款在Windows9x时代就已经诞生的经典游戏,从过去到现在依然都有着它独特的魅力:快节奏高精准的鼠标操作要求、快速的反应能力、刷新纪录的快感,这些都是扫雷给雷友们带来的、只属于扫雷的独一无二的兴奋点。准备动

2401_87368891的博客 1050

用python写扫雷游戏

【代码】用python写扫雷游戏。

yydsdeni的博客 2868

python学习教程,Python实现自动扫雷游戏的方法!

扫雷游戏大家再熟悉不过了,原本互联网游戏没有盛行的时候,本机自带的扫雷为我们的业余生活增添了许多乐趣。用Python代码实现自动扫雷,相信一定很好玩。 这里给大家提供的是一个思路,具体的代码及运行方法还需要各位去自行完善。 下面就是关于Python实现自动扫雷游戏的方法源码(供参考): # coding: utf-8 import win32gui import win32proc...

Python新手学习之家 2060

SAP EWM 内向交货流程(一)

本文介绍了SAP EWM系统中内向交货单的基本配置与操作流程。

huqinghai的专栏 2402

Python+OpenCV实现自动扫雷,挑战扫雷世界记录!

扫雷作为一款在Windows9x时代就已经诞生的经典游戏,从过去到现在依然都有着它独特的魅力:快节奏高精准的鼠标操作要求、快速的反应能力、刷新纪录的快感,这些都是扫雷给雷友们带来的、只属于扫雷的独一无二的兴奋点。先用和第一步完全一样的方法来生成需要访问的雷块的核,之后生成具体的雷块位置,通过count_mines函数来获取九宫格范围内所有雷块的数量,并且判断当前九宫格内所有雷块是否已经被检测出来。因为扫雷游戏的特殊性,在棋盘的四边是没有九宫格的边缘部分的,所以我们需要筛选来排除掉可能超过边界的访问。

CDB3399的博客 5459

ThinkPad T14 Gen 2与T14P系列对比

表格您的需求推荐机型日常办公、出差、文档处理、视频会议✅(够用、轻便、便宜)视频剪辑、3D建模、编程编译、AI训练、高色准设计✅(性能强、屏幕好、扩展佳)想要未来 5 年不换机✅T14p预算低于 5000 元✅T14 Gen 2(或考虑 T14 Gen 3/4)T14p 2025 款 ≠ 小改款,而是架构级升级它从“高性能笔记本”进化为“AI 移动工作站”,核心差异在于NPU + Ultra 平台 + 全面屏显 + 超长续航。如果您从事AI 开发、视频创作、工程仿真、多任务编程。

tecoes的博客 2755

厉害了,用Python实现自动扫雷!

微信改版,加星标不迷路!转载自博客圆:chestnut_egg自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第...

zandaoguang的博客 557

PCB布局规范及其注意事项(纯干货)

这样做的好处是信号1,3层不会有串扰,4和5作为电源有紧密的耦合,3个信号层都有GND平面可以参考,且不会互相产生串扰,唯一的缺点是布线的层面只有3个信号层(信号03的是最适合来传输高速信号,因为该层的二面都有屏蔽,防止干扰传出,也防止干扰传入)33、影响阻抗匹配的参数(ER介电常数(1GHZ以下默认为4.2,以上的话问板厂),H介质厚度(就是内层压合的PP片厚度),W走线的线宽,T走线的厚度(铜厚/减小线的厚度可以增大阻抗))我这里使用的是CITS25来计算阻抗。

qq_42379138的博客 8850

VS2022错误列表高效处理:从复制到Excel表格的完整指南

本文详细介绍了在Visual Studio 2022中高效处理错误列表的实用技巧,重点讲解了如何将错误信息一键复制并粘贴到Excel表格中。通过基础操作、自定义视图、筛选功能及常见问题解决方案,帮助开发者将杂乱的编译错误整理成清晰、可排序、可筛选的数据表,极大提升了团队协作、错误分析和项目管理的效率。

weixin_28837817的博客 361

用 Python 实现自动扫雷!

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。如果我的分享对你有帮助,请关注我,一起向上进击。来源丨https://zhuanlan.zhihu.com/p/35755039用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。中级 - 0.74秒 3BV/S=60.81相信许多人很早就知道有扫...

codingpy的博客 135

Markdown编辑器介绍

这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。

soso1968的博客 1181

破纪录了!用 Python 实现自动扫雷!

用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。中级 - 0.74秒 3BV/S=60.81相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件)...

AI科技大本营 554

LS-DYNA超高速碰撞仿真入门:从SPH算法配置到铝靶板穿孔分析(附K文件模板)

本文详细介绍了使用LS-DYNA中的SPH(光滑粒子流体动力学)算法进行超高速碰撞仿真的完整流程。以铝弹丸撞击铝靶板为例,从SPH算法原理、LS-PrePost前处理、材料模型与状态方程设置,到接触定义、边界条件及K文件生成,提供了系统的入门指导和关键参数调试经验,帮助工程师高效模拟材料破碎、穿孔等极端变形问题。

h0i1j2k3l的博客 735

冠层分析法提取叶面积指数及其应用

冠层分析法是利用植物冠层空间结构分析LAI的方法。其基本原理是通过相机或扫描仪对植物冠层垂直方向的照片或图像进行获取,再运用图像处理方法实现植被的自动识别和覆盖度计算,以此推算LAI。假设有一块田地,需测量其LAI,首先在田地中央设置一杆高度为3米、朝向田地中心、覆盖角度为50度的相机。利用上述函数,对相机采集到的图像进行处理,即可得到田地的LAI。在Matlab中,读取图片可以使用imread函数,对图片进行预处理可以使用imadjust函数调整灰度,使用imbinarize函数进行二值化处理。

m0_47037246的博客 739

python扫雷 高级算法_厉害了,用Python实现自动扫雷!

微信改版,加星标不迷路!转载自博客圆:chestnut_egg 自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式。一、准备工作1、扫雷游戏我是win10,没有默认的扫雷,所以去扫雷网下载http://www.saolei.net/BBS/ 2、python 3我的版本是 python 3.6.13、python的第三方库win32...

weixin_42318708的博客 460

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

破世界纪录了!用Python实现自动扫雷!

用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。扫雷作为一款在Windows9x时代就已经诞生的经典游戏,从过去到现在依然都有着它独特的魅力:快节奏高精准的鼠标操作要求、快速的反应能力、刷新纪录的快感,这些都是扫雷给雷友们带来的、只属于扫雷的独一无二的兴奋点。

Python84310366的博客 783

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 干货!Python 包的依赖管理,有解了!
下一篇: Python编程的终极十大工具
大模型应用场景
博客等级 码龄5年 7670粉丝 1350原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值