【大语言模型系列】利用MetaGPT框架自动开发一个游戏软件(完整教程)

一、实现功能 MetaGPT是一个应用在软件开发领域的多智能体框架,其主要创新点在于将SOP标准流水线和Agent结合在了一起,使得拥有不同技能的Role之间配合完成一项较为复杂的任务。本文将用一个案例来演示整个流程。 二、实现代码 项目地址:https://github.com/geekan/MetaGPT 论文地址:https://arxiv.org/pdf/2308.00352.pdf 环境 win10(cmd) Anaconda(python3.10) git工具 科学上网工具 OPENAI的api_key(本文采用GPT4模型) npm工具 步骤 第一步:克隆仓库到某个文件夹下,如在D:\workspace\software-factory下执行 git clone https://github.com/geekan/metagpt 第二步:创建anaconda环境并激活 conda create -n metagpt python=3.10 conda activate metagpt 第三步:到项目文件夹下,安装依赖包 npm install -g @mermaid-js/mermaid-cli pip install -r requirements.txt 第四步:配置OPENAI的密钥 在 MetaGPT/config 目录中,创建 key.yaml文件,填入自己的OpenAI的API key和OPENAI_API_BASE ,或者 直接在config 目录中的config.yaml文件进行配置,或者 在cmd窗口输入以下命令: set OPENAI_API_KEY=your_api_key set OPENAI_API_BASE = your_api_base 第五步:构建软件 python startup.py "Write a cli snake game" 三、实现效果 (1)产品经理开始写产品需求文档 (2)架构师开始写设计文档 (3)项目经理开始进行任务拆解 (4)工程师开始写代码并进行代码评审 (5)项目完成 作者简介: 读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信!

一文搞懂 Python 3 中的 import

简介 Python 编程语言自带各种内置函数。其中包括一些常见的函数,例如: print() 用于打印表达式abs() 用于返回一个数的绝对值int() 用于将其他数据类型转换为整数len() 用于返回序列或集合的长度 然而,这些内置函数是有限的,我们可以利用模块来创建更复杂的程序。 模块 是由 Python .py 文件组成的 Python 代码。任何 Python 文件都可以被引用为一个模块。一个名为 hello.py 的 Python 文件具有模块名称 hello,可以被导入到其他 Python 文件中,或者在 Python 命令行解释器中使用。您可以通过阅读《如何在 Python 3 中编写模块》来了解如何创建自己的模块。 模块可以定义函数、类和变量,您可以在其他 Python .py 文件中或通过 Python 命令行解释器中引用这些函数、类和变量。 在 Python 中,通过使用 import 语句来访问模块。当您这样做时,您执行模块的代码,保持定义的作用域,以便您当前的文件可以利用这些定义。 例如,当 Python 导入一个名为 hello 的模块时,解释器首先会搜索内置模块中是否存在名为 hello 的模块。如果没有找到内置模块,Python 解释器将在它从 sys.path 变量接收到的目录列表中搜索名为 hello.py 的文件。 本教程将引导您检查和安装模块,导入模块以及为模块设置别名。 先决条件 您应该已经安装了 Python 3,并在您的计算机或服务器上设置了编程环境。如果您还没有设置编程环境,可以参考适用于您操作系统(Ubuntu、CentOS、Debian 等)的本地编程环境或服务器编程环境的安装和设置指南。 检查和安装模块 Python 标准库中内置了许多模块,这些模块提供了对系统功能的访问或提供了标准化的解决方案。Python 标准库是每个 Python 安装的一部分。 要检查这些 Python 模块是否已准备就绪,请进入您的本地 Python 3 编程环境或基于服务器的编程环境,并在命令行中启动 Python 解释器,如下所示:

机器学习_实战框架

文章目录 介绍机器学习的实战框架1.定义问题2.收集数据和预处理(1).收集数据(2).数据可视化(3).数据清洗(4).特征工程(5).构建特征集和标签集(6).拆分训练集、验证集和测试集。 3.选择算法并建立模型4.训练模型5.模型的评估和优化 介绍机器学习的实战框架 一个机器学习项目从开始到结束大致分为 5 步,分别是定义问题、收集数据和预处理、选择算法和确定模型、训练拟合模型、评估并优化模型性能。这 5 步是一个循环迭代的过程,你可以参考下面的图片: 1.定义问题 我们项目的目标就是,建立一个机器学习模型,根据点赞数和转发数等指标,估计一篇文章能实现多大的浏览量。 因为要估计浏览量,所以在这个数据集中:点赞数、转发数、热度指数、文章评级,这 4 个字段都是特征,浏览量就是标签。这里我们已经有要估计的标签了,所以这是一个监督学习问题。再加上我们的标签是连续性的数值,因此它是一个回归问题。 2.收集数据和预处理 (1).收集数据 首先是收集数据,这一步又叫采集数据。 在现实中,收集数据通常很辛苦,要在运营环节做很多数据埋点、获取用户消费等行为信息和兴趣偏好信息,有时候还需要上网爬取数据。 收集数据的方法有很多,这里推荐之前写过的相关文章: 数据爬虫(JSON格式)&数据地图可视化(pyecharts)【步骤清晰,一看就懂】:https://blog.csdn.net/weixin_42504788/article/details/134588642 数据爬取+数据可视化实战_哪里只得我共你(Dear Jane)_词云展示----网易云:https://blog.csdn.net/weixin_42504788/article/details/134622850 数据爬取+可视化实战_告白气球_词云展示----酷狗音乐:https://blog.csdn.net/weixin_42504788/article/details/134622575 处理Json格式的数据,如何用Python将数据存放入Excel中(步骤清晰,一看就懂):https://blog.csdn.net/weixin_42504788/article/details/134543733 (2).数据可视化 数据可视化是个万金油技能,能做的事非常多。比如说,可以看一看特征和标签之间可能存在的关系,也可以看看数据里有没有“脏数据”和“离群点”等。 常用的工具包有: import matplotlib.pyplot as plt # Matplotlib – Python画图工具库 import seaborn as sns # Seaborn – 统计学数据可视化工具库 (3).数据清洗 处理缺失的数据:用均值填充、众数填充或0。如果建模用树模型,也可以不填充,树模型算法自身可以处理缺失值。 处理重复的数据:完全相同,删去即可。 处理错误的数据:部门人数、销量、销售金额小于0,遇到这类情况删去即可。 处理不可用的数据:建模的时候,数据必须是数字,不能是中英文等情况。比如性别出现男女字样,需要转化后再进行建模 查看空缺值NaN出现的次数:df.isna().sum() 把出现了NaN的数据行删掉:df = df.dropna() (4).特征工程 特征贴合业务实际,特征越丰富,模型效果会更好 (5).构建特征集和标签集 特征是输入机器学习模型的变量。 X = df.drop(['浏览量'],axis=1) X.head() 标签是结果或目标。 y = df.浏览量 y.head() (6).拆分训练集、验证集和测试集。 一般为了简化,验证集会省略,这里展示如何从数据中切分出训练集跟测试集 #将数据集进行80%(训练集)和20%(验证集)的分割 from sklearn.

SQL Server修改数据字段名的方法

1. ALTER TABLE语句修改 这是一种最常用的数据库更改字段的方法,使用Alter Table语句来更改数据库字段的名称。 一般格式如下: ALTER TABLE 表名 RENAME COLUMN 原字段名 TO 新字段名; 例如,修改字段名字段名从UserName到Uname: ALTER TABLE Users RENAME COLUMN UserName TO Uname 2. EXEC sp_RENAME存储过程修改 EXEC sp_RENAME存储过程是由SQL Server提供的一个存储过程.它接受两个参数,一个是原表/字段名.一个是要替换为的新表/字段名.其格式如下: EXEC sp_RENAME ‘表名.原字段名’, ‘新字段名’, ‘COLUMN’; 例如,修改字段名字段名从UserName到Uname: EXEC sp_RENAME ‘Users.UserName’, ‘Uname’, ‘COLUMN’; 3.使用UPDATE语句修改 如果只想少量改变数据表,可以使用update语句来修改字段的名称.其格式如下: UPDATE 表名 SET 字段名 = ‘替换名’ WHERE 字段名 = ‘原始名’ 例如,修改字段名字段名从UserName到Uname: UPDATE Users SET UserName = ‘Uname’ WHERE UserName = ‘UserName’

ubuntu 相关内容

ubuntu 优盘安装: 台式机安装纯ubuntu系统的操作步骤-CSDN博客https://blog.csdn.net/youngwah292/article/details/127032009?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170583039216800213099577%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170583039216800213099577&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-10-127032009-null-null.nonecase&utm_term=ubuntu%20%E5%AE%89%E8%A3%85%E7%9C%9F%E6%9C%BA&spm=1018.2226.3001.4450 ubuntu 设置轻量级桌面: Ubuntu安装轻量级桌面_ubutu升级为桌面板-CSDN博客https://blog.csdn.net/JasBin2008/article/details/106173814#:~:text=Ubuntu%E9%BB%98%E8%AE%A4%E6%A1%8C%E9%9D%A2%E5%A4%AA%E5%8D%A0%E7%94%A8%E5%86%85%E5%AD%98%E4%BA%86%EF%BC%8C%E6%9C%AC%E4%BA%BA%E7%9A%84%E5%B0%8F%E6%9C%AC%E6%9C%AC%E5%A4%AA%E7%83%82%E4%BA%86%EF%BC%8C%E6%89%80%E4%BB%A5%E9%80%80%E8%80%8C%E6%B1%82%E5%85%B6%E6%AC%A1%EF%BC%8C%E5%AE%89%E8%A3%85%E8%BD%BB%E9%87%8F%E7%BA%A7%E6%A1%8C%E9%9D%A2%EF%BC%81%20%E4%BD%BF%E7%94%A8%E4%BB%A5%E4%B8%8B%E5%91%BD%E4%BB%A4%E5%AE%89%E8%A3%85%20%24sudo%20apt-get%20install%20lxde%201,%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E8%BF%9B%E5%85%A5%E7%99%BB%E5%BD%95%E7%95%8C%E9%9D%A2%EF%BC%8C%E9%80%89%E6%8B%A9lxde%E5%8D%B3%E5%8F%AF%20%E5%BC%80%E6%9C%BA%E8%BF%9B%E5%85%A5%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%88%96%E6%A1%8C%E9%9D%A2%20%E6%89%A7%E8%A1%8C%E4%B8%8B%E9%9D%A2%E5%91%BD%E4%BB%A4%E5%BC%80%E6%9C%BA%E8%BF%9B%E8%A1%8C%E5%91%BD%E4%BB%A4%E8%A1%8C%20%24sudo%20systemctl%20set-default%20multi-user.target

HarmonyOS应用开发的工程目录结构

在介绍鸿蒙应用开发的细节,我们来了解工程目录结构,这样我们才知道我们能做什么。 我们现在来一一介绍这些目录都是用来做什么的。 AppScope > app.json5 应用级的配置信息 AppScope > resources 这个目录下的base>element用于存放全局使用的基本元素,如字符串、颜色和布尔值。base>media目录则存储媒体、动画和布局等资源文件。如果模块下的resources的有同样的资源,那么就会优先使用模块下的资源,否则就使用这里的资源。 hvigor:这个目录与android工程的gradle目录很像,行使的功能也类似。 oh_modules 这个目录用来存放第三方库依赖信息 build-profile.json5 这个文件位于根目录,它放置应用级配置信息,包括签名配置和产品配置,它的作用于android工程中的根目录下的build.gradle差不多。 hvigorfile.ts 应用的编译脚本 local.properties 这个与android工程的那个差不多 hvigorw: 这个与android工程的gradlew的作用相似。hvigorw.bat是对应在windows中使用的脚本。 entry 这个目录与android工程的app目录是同等作用,就是这个应用的入口,所以在鸿蒙干脆它的目录名也起成了入口(entry)。我们的写的应用的代码都是放在这个目录中,打包时,就会将这里的代码编译,生成HAP,即HarmonyOS Ability package鸿蒙能力包,对就android的apk(application package)包。 entry目录下的子目录及其作用 build-profile.json5这个是编译配置文件,它包含了当前模块的信息和编译配置选项等等,就像android工程中每个module(模块)下都有一个build.gradle来管理当前模块的编译。Note: 在鸿蒙应用工程的根目录也有一个这样的文件,那个是应用级的,全局的,这个是当前模块的局部的,android工程中的build.gradle也是一样,有一个应用级的,也有一个当前模块的。 hvigorfile.ts 这是一个模块级的编译脚本,在鸿蒙应用工程根目录也一个,那个是应用级的。在android工程倒是没有这样独立出来的编译脚本,它的编译脚本都放在了对应的build.gradle脚本中。 src > main > module.json5 这个文件描述了应用的全局配置信息,这个目录下的这份文件相当于android中app模块下的AndroidManifest.xml。 src > main > ets 放ArkTS源代码的地方,鸿蒙应用可以使用官方的开发语言ArkTS来开发。 src > main > ets > entryability 这个目录就是用来放所那些应用或服务的入口的,其实就是那些继承了UIAbility类的类文件。相当于android应用中的activity类 src > main > ets > pages 这个目录是专门用来放页面的,因为ArkTS采用了声明式UI,和android的Compose和iOS的SwiftUI都同样的产品。鸿蒙在这个目录里定义好页面,然后在src > main > ets > entryability 对应的ability加载出来。 src > main > resources 这个目录相当于android工程的res目录,用来放置应用用到的资源文件,如图片、多媒体、文字等,国际化也是在这里定义的。资源目录分为base基目录、qualifiers限定符目录和rawfile目录。

flutter项目怎么判断是不是web平台?Unsupported operation: Platform._operatingSystem

如果你使用Platform 这个工具来判断的时候,很有可能会报错: ======== Exception caught by widgets library ======================================================= The following UnsupportedError was thrown building MyApp(dirty): Unsupported operation: Platform._operatingSystem The relevant error-causing widget was: Platform判断的时候只能判断除了web平台的判断: Flutter 的 Platform 类提供了一些属性和方法,用于获取关于当前平台的信息。以下是一些常用的 Platform 属性和方法: Platform.isAndroid:一个布尔值,用于检查当前平台是否为 Android。 Platform.isIOS:一个布尔值,用于检查当前平台是否为 iOS。 Platform.isFuchsia:一个布尔值,用于检查当前平台是否为 Fuchsia。 Platform.isLinux:一个布尔值,用于检查当前平台是否为 Linux。 Platform.isMacOS:一个布尔值,用于检查当前平台是否为 macOS。 Platform.isWindows:一个布尔值,用于检查当前平台是否为 Windows。 只能使用这种方式判断web平台:如果是web平台返回true,不是返回false identical(0, 0.0) 所以如果你想判断是不是web平台,然后修改字体可以这样: // 解决桌面端字体粗细不一致和繁体的情况 fontFamily: identical(0, 0.0) ? null : "微软雅黑", 因为只有web平台下js判断0和0.0才判断为相等,其他语言都是false。 至于js为啥会将0和0.0判断为相等,是因为js使用弱类型判断的时候,会对右边的类型转成左边的类型,然后再进行判断,转换后的0.0其实就是0,所以才相等。 js问题 js中 0==‘0’、0==[] 为 true ,为什么 ‘0’==[] 为false 分析 == 是弱类型比较

用大模型增强数据分析应用

大模型出道即巅峰,它广受欢迎并在很多领域中成为有力的工具,当然包括数据分析领域。你可能不确定如何把大模型整合到你的工作中,如帮助你用数据驱动决策。本文介绍一些思路带你在不同应用场景下使用数据分析提示词。当然不仅局限与ChatGPT,其他国内大模型也一样适用。 1. 大模型优势 传统数据分析需要一定数学基础和技术壁垒,结合大模型我们可以快速学习数据分析的概念、关键特性以及如何有效使用,当然我们也可以编程实现特定领域结合大模型的个性化数据分析应用,给自己产品增加有竞争力的功能。 大模型提供了通用的数据分析工具,没有太多技术背景的人可以通过提示词获得代码示例或统计解释,大模型可以帮助我们把原始数据转为可执行的商业洞察。在正式开始之前,我们需要了解一些基本步骤和原则。 处理数据 大模型能够快速处理原始数据并转换为结构化信息,远远快于传统的手动采用编码方式(如python+jupyter notebook),它可以分析长期趋势、异常检测,甚至用历史数据进行机器学习预测。 数据洞察 大模型可以智能总结数据点,帮助抽取传统方法可能忽略的有价值洞察。在理解上下文方面,比你想象的要好:它可以揭示模式、关系和趋势。 NLP 大模型可以使用自然语言处理能力,这是现有数据分析工具或平台所没有的。它可以使用清晰易懂的方式进行交流,对数据科学场景来说,可以让非技术背景人员更好理解和接受。 用户可以使用口语作为提示词,当然需要多轮优化。针对特定场景需要进行定制,使它在不同领域成为有力工具,如医疗、金融以及体育等。 注意要点 数据需要清洗 数据质量是数据分析结果的上线,“垃圾进、垃圾出”是不变的规则。 人为判断为要 虽然大模型能自动化一些技术工作,特别是基础工作,但认为判断是关键环节。大模型只是工具,不理解数据的内涵,任何生成内容都需要人为评估并考虑伦理问题。 使用匿名数据 用户必须确保用于分析的任何数据都是充分匿名的,没有个人身份信息,以避免隐私泄露。 数据分析知识 虽然大模型简化了数据分析过程,但用户仍需要学习和理解概念,包括数据和统计。 2. 数据分析提示词 下面从三个方面介绍一些数据分析领域相关的提示词。 学习新的概念 与传统书籍相比,大模型是响应式的。我们可以提出问题,特别是有挑战性的概念,很快会收到有启发的回答。举例,如果你正在学习PCA(principal component analysis),不仅可以提问让其解释概念,还可以在遇到困惑时进一步提问澄清你的理解。 大模型的灵活性意味着你可以将复杂的想法分解成更易于理解的部分,每个部分都可以进一步想它提问。我们可以先要求它解释PCA,然后再提问它现实中有那些领域中使用PCA的示例。下面是一些数据分析提示词: “在数据分析中使用降维技术的优点和缺点是什么?” “在数据分析中,有哪些有效的异常值检测和处理技术?” “你能推荐一些适合聚类我的数据集的无监督学习算法吗?” “在评估我的分类模型的性能时,我应该考虑哪些评估指标?” 编写学习教程 由于最好的学习方式是边做边做,因此通过定制的分步示例进行学习更有效,大模型可以生成每行代码并附有详细的解释,这是学习新技术概念的一种非常有用的方式。下面是一些典型提示词: “我如何有效地处理数据集中缺失的数据进行分析?” “机器学习模型的特征缩放和归一化涉及哪些步骤?” “你能提供一个如何实现模型交叉验证的例子吗?” “如何使用自然语言处理技术对文本数据进行情感分析?” 学习最佳实践 使用有针对性的提示词,可以提取行业数据分析中的最佳实践方法,从而能对特定方法或概念的细微差别提供更多见解。 “有哪些主流的时间序列预测模型可以用于我的数据分析?” “在机器学习中处理不平衡数据集的最佳实践是什么?” “哪种可视化技术最适合表示多变量数据中的关系?” 总结 大模型只是众多工具中的一种:它不应该取代人类的判断,也不应该取代数据科学、统计分析和机器学习基础性功能。

Python学习从0到1 day7 Python判断语句

路远殊途,祝你得偿所愿 ——24.1.21 前言 进行逻辑判断,是生活中常见的行为,同样,在程序中,进行逻辑判断也是最为基础的功能 一、布尔类型和比较运算符 1.布尔类型 进行判断,有两个结果,True、False,True本质是1,False本质是0 定义变量存储布尔类型数据: 变量名称 = 布尔类型字面量 布尔类型不仅可以自行定义,同时也可以通过计算得来 使用比较运算符进行比较得到布尔类型的结果 result = 10>9; print(f"10>9 is {result}") print(f"result的类型是:{type(result)}") # 比较运算符的使用 # ==,!=,>=,<=,>,< # 演示进行内容的相等比较 num1 = 10 num2 = 15 print(f"num1 != num2的结果是:{num1!=num2}") num1 = 15 num2 = 15 print(f"num1 == num2的结果是:{num1==num2}") name1 = "一切都会好的" name2 = "我一直相信" name3 = "一切都会好的" print(f"name1,name2,name3三者:{name1==name2},{name1==name3},{name1!=name2}") 2.比较运算符的演示 #演示比较运算符的比较运算 print(f"name1>=name2结果是:{name1>=name2}") print(f"name1<=name2结果是:{name1<=name2}") print(f"name2>=name3结果是:{name2>=name3}") print(f"name2<=name3结果是:{name2<=name3}") print(f"name1==name3结果是:{name1==name3}") print(f"name1!=name2结果是:{name1!=name2}") print(f"name1==name3结果是:{name1==name3}") 3.总结 1.在Python中,可以表示真假的数据类型是: 布尔类型,字面量True表示真,字面量False表示假 2.除了可以定义布尔类型外,还可以通过_计算得到布尔类型? 比较运算 == 判断是否相等 !

使用Python基于metricbeat和heartbeat采集数据进行告警

一、系统架构 IP主机名角色备注11.0.1.11kafka1kafka和MySQL11.0.1.12kafka2kafka11.0.1.13kafka3kafka11.0.1.14demo1metricbeat和heartbeat 二、部署Kafka 省略 二、部署Metricbeat和Heartbeat metricbeat配置: metricbeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false fields: ip: 11.0.1.14 output.kafka: hosts: ["11.0.1.11:9092","11.0.1.12:9092","11.0.1.13:9092"] topic: "ELK-metricbeat" heartbeat配置: heartbeat.config.monitors: path: ${path.config}/monitors.d/*.yml reload.enabled: false reload.period: 5s # ---------------------------- Kafka Output ---------------------------- output.kafka: hosts: ["11.0.1.11:9092","11.0.1.12:9092","11.0.1.13:9092"] topic: "ELK-heartbeat" heartbeat的tcp.yml配置: - type: tcp id: my-tcp-monitor name: My TCP monitor enabled: true schedule: '@every 20s' hosts: ["11.0.1.14:80","11.0.1.13:80","11.0.1.12:80"] ipv4: true ipv6: true mode: all 三、MariaDB表结构 cmdb_app表(存储应用系统的信息): SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for cmdb_app -- ---------------------------- DROP TABLE IF EXISTS `cmdb_app`; CREATE TABLE `cmdb_app` ( `id` int(11) NOT NULL AUTO_INCREMENT, `app_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `ops_user` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `ops_tel` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `ops_dep` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1; 解释:

MATLAB聚类工具箱

本文借鉴了数学建模清风老师的课件与思路,可以点击查看链接查看清风老师视频讲解:【1】MATLAB聚类工具箱:提前预览工具箱的核心功能_哔哩哔哩_bilibili 关于工具箱的获取,在数学建模学习交流公众号里发送: 567891 %% 本工具箱对MATLAB的要求: % (1)MATLAB版本为2021a及以上版本 % (2)只支持windows系统,不支持苹果电脑的MAC系统 % (3)MATLAB APP中有统计和机器学习工具箱(Statistics and Machine Learning Toolbox) %% 使用下面的代码加载Kmeans工具箱(精简版,无使用期限) % 不要在压缩包中直接打开文件,先解压后再打开,MATLAB的当前文件夹也记得更改 %【Matlab新手经常遇到的一些问题】 https://b23.tv/EopJrWI P_mainfunction_KmeansCluster_Simple_Version %% (1)示例1:鸢尾花数据集 % 工具箱中附带了鸢尾花的数据集,这是MATLAB内置的数据集 % 你可以看到在MATLAB的工作区有一个名为meas的矩阵(大小是150*4) % 这表示数据集中有150个样本,4个指标: % 花萼长 花萼宽 花瓣长 花瓣宽(单位都是cm) meas= [5.1 3.5 1.4 0.2;4.9 3 1.4 0.2;4.7 3.2 1.3 0.2;4.6 3.1 1.5 0.2;5 3.6 1.4 0.2;5.4 3.9 1.7 0.4;4.6 3.4 1.4 0.3;5 3.4 1.5 0.2;4.4 2.9 1.4 0.2;4.9 3.1 1.5 0.1;5.4 3.7 1.

C++线程封装与线程池实现

基础 之前在Linux阶段学习APUE时,我们学过进程的相关概念、后面又学了线程的相关概念。而现在我们主要是来进行 线程的进一步学习。之前在Linux里面使用的是C语言面向过程的思想,从现在开始我们需要使用C++面向对象的思想进行封装,但是在封装之前我们先来回顾一下线程相关的API。 线程的创建 #include <pthread.h> //函数原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); //参数说明 thread:线程id attr:线程属性,默认为空 start_routine:线程入口函数 arg:线程入口函数的参数,默认可以使用空 线程终止 #include <pthread.h> //功能:线程终止(注意:进程终止是exit函数) //函数原型 void pthread_exit(void *value_ptr); //参数说明 参数value_ptr:value_ptr不要指向一个局部变量。 返回值:无返回值,跟进程一样,线程结束的时候无法返回到它的调用者(自身) 线程等待 #include <pthread.h> //函数原型 int pthread_join(pthread_t thread, void **value_ptr); //参数说明 参数thread:线程ID value_ptr:它指向一个指针,后者指向线程的返回值 返回值:成功返回0;失败返回错误码 为什么需要线程等待? 1、已经退出的线程,其空间没有被释放,仍然在进程的地址空间内。 2、创建新的线程不会复用刚才退出线程的地址空间。 3、主线程需要知道所创建的新线程是否有完成任务,并且可以避免像僵尸进程的问题。 线程取消 #include <pthread.h> //函数原型 int pthread_cancel(pthread_t thread); //参数说明 参数thread:线程ID 返回值:成功返回0;失败返回错误码 调用该函数的线程将挂起等待,直到 id 为 thread 的线程终止。 thread线程以不同的方法终止,通过pthread_join得到的终止状态是不同的,总结如下: 如果thread线程通过return返回,value_ ptr所指向的单元里存放的是thread线程函数的返回值。

公众号H5跳转客服页面

要把大象装冰箱分为几步? 1、首先登录微信公众平台 2、F12打开控制台console输入wx.commonData.data,找到uin_base64 3、然后在需要跳转的页面加入跳转方法就可以了~ window.location.href=‘https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=你的uin_base64&scene=110#wechat_redirect’ 注:此方法旨在实现本司业务下的跳转功能,并非适合所有特殊情况下的跳转需求,不能直接跳转客服页面

重学Java 10 面向对象

正是风雨欲来的时候,火却越烧越旺了 ——24.1.20 重点 1.为何使用面向对象思想编程 2.如何使用面向对象思想编程 3.何时使用面向对象思想编程 4.利用代码去描述世间万物的分类 5.在一个类中访问另外一个类中的成员 -> new对象 6.成员变量和局部变量的区别 一、面向对象的介绍 1.面向过程:自己的事情自己干,代表语言:C语言 eg、洗衣服:每一步都自己干 -> 找个盆,加水,放洗衣粉,找搓衣板,开始洗衣 2.面向对象:自己的事情别人帮忙去做,代表语言:Java语言 eg、洗衣服:自己的事情别人干 -> 全自动洗衣机 3.使用面向对象思想编程:方便快捷 很多功能都已经实现好了,只需要将其拿来使用即可,简化了我们自己的编写过程,减少了代码量 4.什么时候使用面向对象思想编程: 调用别人的功能时 在一个类中想使用别的类中的思想时,就使用面向对象思想编程 至于使用的代码功能细节,我们不关心,我们只需要知道如何使用即可 5.如何使用面向对象思想编程: ①new,new. -> 点代表的是调用 ②特殊:如果调用的成员带static关键字,我们直接使用类名点即可 二、类和对象 2.1 类(实体类)_class 1.测试类:带main方法的类,主要是运行代码的 2.实体类:是一类事物的抽象表示形式 世间万物的分类:比如:犬类、人类、猫类、鼠标类 组成部分: 1.属性(成员变量):这一类事物有什么 ①定义位置:类中方法外 ②作用范围:作用于当前类 ③定义格式:数据类型 变量名 ④默认值: 整数:0 小数:0.0 字符:'\U0000‘ 布尔:false 引用:null 2.行为(成员方法):这一类的事物能干嘛 只需要将方法中所学的static干掉,其他的都一样 只需要将某个分类的属性和行为描述出来,就可以描述这个类 案例 人类 public class Demo65Object02Person { //属性 -> 成员变量 String name; int age; //行为 -> 成员方法 public void eat(){ System.

PostgreSQL命令大全

文章目录 连接与退出数据库操作表操作外键约束视图操作存储过程与函数权限管理事务管理查询优化与分析数据类型转换分区表操作复制与备份恢复 PostgreSQL是一个功能强大的开源关系型数据库管理系统,以下是一些基本且常用的命令按功能分类: 连接与退出 连接数据库: psql -U [username] -d [database] 示例:以用户postgres身份连接到名为mydb的数据库 psql -U postgres -d mydb 退出 PostgreSQL Shell: \q 数据库操作 查看所有数据库: \l 创建数据库: CREATE DATABASE [database_name]; 示例: CREATE DATABASE my_new_db; 切换数据库: \c [database_name] 示例: \c my_new_db 删除数据库: DROP DATABASE [database_name]; 示例: DROP DATABASE unused_db; 表操作 列出当前数据库中的表: \dt 创建表: CREATE TABLE [table_name] ( column1 data_type, column2 data_type, ... ); 示例: CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(50), age INTEGER ); 查询表数据:

post请求下载文件,ajax

在这里当时想着生成pdf的请求为post,获取pdf的请求为get,通过全局变量filename来获取pdf,但是这里存在着线程安全问题,全局变量会被不同的用户更改,下载时可能会下载到另外一个用户所生成的文件。 处理办法是,把生成pdf和下载pdf合并成同一个接口,这样避免了上述情况的发生,但是在前台浏览器获取pdf出现了问题,浏览器通过get请求可以直接下载文件(弹出下载框),但是这个接口是需要要是post请求(传递实体类),所以通过前台的数据处理和后台的返回头setHeader设定解决了这个问题。 通过异步的post请求,返回数据浏览器不会自动下载,需要在前端异步请求做处理 axios.post("http://localhost:8080/satable/pdf", param,{responseType:'blob'}).then(res => { const name = res.headers['content-disposition']; let fileName = ''; if (name) { const str1 = name.replace(' ', ''); const arr1 = str1.split(';'); arr1.some(item => { if (item.indexOf('filename') != -1) { fileName = item.split('=')[1]; } return item.indexOf('filename') != -1; }); if (fileName === ''){ fileName = 'excel.pdf' } } else { fileName = 'excel.pdf' } try { let objectUrl1 = window.URL.createObjectURL(new Blob([res.data])); let elink = document.

如何在服务器上运行 Python 程序

大家好,我是强哥。 今天给大家分享一个小的知识点,如何在服务器上运行 Python 程序。 我的服务器系统是 CentOS 7.9 ,这也是最常用的服务器系统之一。 我将以此为例,给大家介绍一个零基础也可以轻松上手的,在服务器上运行 Python 程序的方法。 Part1安装宝塔面板 安装好宝塔面板以后,主界面大概长这样。 Part2安装Python 项目管理器 点击左侧 软件商店 按钮,切换至软件商店页签。 然后在搜索框中搜索 python 关键词,即可搜到 Python 项目管理器 。 点击安装好以后,后续我们就可以通过它来方便地管理我们的 Python 程序了。 Tips:可以勾选 首页显示,这样以后可以直接从面板首页找到入口了。 打开 Python 项目管理器,我们可以看到左侧有 项目管理 、版本管理 、日志 三个页签。 Part3安装 Python 环境 首先,我们切换到 版本管理 页签,这里可以进行 Python 版本的管理。 下拉选项框,选择自己要安装的 Python 版本,然后点击 安装版本 按钮。 Tips:已安装的版本,如果不需要了,也可以选中并点击 卸载版本。 等待片刻,即可安装完成。 Part4添加 Python 项目 首先,我们在服务器上自己创建一个路径,用来存放我们的 Python 代码。 例如,我在 根目录 > www 目录下创建了一个 Projects 文件夹用于存放我的 Python 项目。 项目路径创建好,源码也上传好以后,准备工作就完成了。 作为演示,我创建了一个 test_python 项目,并写了一段最简单的 flask 代码,如下图所示。

国科大学位论文 latex 模板编译报错踩坑

错误: Runaway argument? {\376\377\0002\000.\0 ! File ended while scanning use of @@BOOKMARK. <inserted text> \par l.61 \begin{document} ? 解决方法: 进入 .tex 所在文件夹,将下图中除了 .tex 文件外的其他文件全部删除,再重新编译执行就行了。

git add -u 什么意思

git add -u 是 Git 命令的一部分,用于将已跟踪的文件的修改添加到暂存区(也称为索引)。这个命令只关注那些已经被 git 跟踪的文件,即那些在之前的提交中已经被添加到仓库的文件。 具体来说: git add -u 会将所有已跟踪文件中的修改和删除操作添加到暂存区,但它不会添加未跟踪的新文件(即之前从未被添加过的文件)。如果想要同时添加新文件、更新已跟踪文件以及删除文件,可以使用 git add . 或 git add --all。 该命令常用在准备提交更改时,如果你对一些已存在的文件做了修改或者删除了它们,并希望这些更改在下次提交时被包含进去,就可以使用 git add -u 将这些操作"暂存"起来。然后你可以通过 git commit 创建一个新的提交,将这些暂存的更改正式记录到版本历史中。