Python与Matlab混合编程案例
前言
因为项目需要,需要批处理很多Matlab的.m文件,从每个文件中提取结果合并到一个文件中。 很明显,如果手工统计,几百个文件会累死的。 因此立即想到了Python在批处理方面的优势,因此就在网上找了相关资料,实现了想要的功能,这里简单记录一下。
一、环境准备
首先电脑上要有Matlab,而且不能太老,比如Matlab 7.0可能就不行。 在电脑Matlab的安装目录下,依次找到MATLAB\R2015b\extern\engines\python,例如我电脑上的路径是D:\Program Files\MATLAB\R2015b\extern\engines\python。 在这个目录下有个setup.py。在命令行中安装这个脚本,正常就可以成功了。
然后就可以在Python中import了,这个包的名字就叫”matlab”。
二、简单示例
下面的代码简单演示了在Python中调用了Matlab的sqrt()函数并返回结果。说明了调用的主要步骤,同时加入了计时的代码,记录每个过程的耗时。
# coding=utf-8
import matlab.engine
import time# 第一步,初始化Matlab的Runtime
t1 = time.time()
eng = matlab.engine.start_matlab()
t2 = time.time()# 第二步,调用Matlab函数
res1 = eng.sqrt(16.0)
t3 = time.time()res2 = eng.abs(-8.6)
t4 = time.time()# 第三步,退出Runtime
eng.quit()
t5 = time.time()print type(res1), res1
print type(res2), res2
print "Initial time", t2 - t1
print "Running time1", t3 - t2
print "Running time2", t4 - t3
print "Quit time", t5 - t4
可以看到,程序输出了和在Matlab中调用函数一样的格式ans=…。同时可以发现,与C# & Matlab混合编程类似,程序运行最耗时的就是Runtime的初始化。 不同的运算耗时的差别与初始化耗时相比可以忽略不计。同时Runtime只要初始化一次,第二次调用函数时就不需要再初始化了。这些都和C#的接口是一样的。
三、更复杂的示例
很明显,我们好不容易用Python调Matlab肯定不是想简单做个开方、取绝对值的运算的,要不然直接Python就可以实现,何必杀鸡焉用牛刀。 比如调用我们自己编写的.m文件中的函数等等。下
1.调用.m文件
首先新建一个m文件,并起名为triangle.m,用于计算三角形面积。如下。
并且将这个m文件放在py文件同一路径下,然后在Python中可以这样调用。
# coding=utf-8
import matlab.engineeng = matlab.engine.start_matlab()
eng.triangle(nargout=0)
eng.quit()
结果如下。
控制台中像Matlab一样输出了结果。 但有几点需要注意。首先nargout=0的含义是表示返回值为空。尽管控制台打印出了结果,但并不会返回给Python。 如果没有这个参数,程序会报错。同时m文件必须和脚本文件在同一目录下才能运行。而eng后面的内容就是m文件的名字。
2.调用自定义函数
把之前的m文件少做修改,编程Matlab函数,如下。
Python调用代码如下:
# coding=utf-8
import matlab.engineeng = matlab.engine.start_matlab()
ans = eng.triangle(2.3, 9.1)
print ans
eng.quit()
这里用变量ans接收了返回值,下一步就可以继续用于其它操作了。 这里也有需要注意的地方。需要记住的是eng后面的依然是m文件的名字而不是函数的名字。 这里就涉及到Matlab中函数的命名规范问题了。一般情况下函数名与m文件名保持一致。 但如果不一致,在Python中经过测试也可以,但最好保持一致。
对于多返回值函数,可以在Matlab中组成一个矩阵,直接返回这个矩阵,然后在Python中再解析。 或者指定返回值个数。
不过需要注意的是,例如Matlab返回了一个a = [[1 2 3]]的矩阵,但直接获取a[0]是错的。因为Matlab返回的是一个二维矩阵,所以矩阵其实是1×3。 所以应该按照行列的方式读取,写成a[0][0]。
在Python中创建Matlab矩阵也很简单。代码如下:
# coding=utf-8
import matlab.engineA = matlab.int8([1, 2, 3, 4, 5])
print type(A), A.size, A
输出结果如下:
3.绘图测试
代码如下。
#coding=utf-8
import matlab.enginedef plot_test(eng):eng.workspace['data'] = \eng.randi(matlab.double([1, 100]), matlab.double([30, 2]))eng.eval("plot(data(:,1),'ro-')")eng.hold('on', nargout=0)eng.eval("plot(data(:,2),'bx--')")eng = matlab.engine.start_matlab()
plot_test(eng)
# 需要让程序在这暂停,类似于C++里的system('pause'),不然Figure一闪而过
# 按任意键退出
raw_input()
eng.quit()
运行结果如下。
首先,对于一些简单的命令,如max、min、power、sqrt等,我们直接可以eng.xxx()来完成。 但对于如绘图等稍微复杂的命令,我们就可以使用eng.eval()函数来完成。 其中参数是我们拼接的需要执行的字符串,如“plot(data(:,1),’ro-‘)”等。这样程序在运行时就会调用Matlab执行这一行语句。 所以其实同理,我们完全可以把之前的例子写成eng.eval("sqrt(16.0)",nargout=0),控制台会输出结果4。 或者全部用eval()函数来写Matlab命令,不与Python进行数据交互,只是调用Matlab。 在使用eval()时需要注意返回值的问题。如果没有返回值,别忘了加上一句nargout=0。
以上只是很少一部分混合编程的相关知识,只是项目中用到的部分。其实还有很多东西可以学习,更多有关Python Matlab混合编程的说明可以参考官方文档。 看到网上还有一种Matlab的调用方式,直接pip install mlab,然后直接import mlab就可以了,但是没有尝试,因此这里不多介绍了。
三、项目相关
最后简单说一下项目相关的东西。项目中的需求是,有很多.m文件分布在许多文件夹中,需要获取到某一路径下的全部m文件。 然后获取m文件中矩阵的相关统计值。最后再将各个m文件的统计结果汇总在一个m文件中。 因此使用了Python的os模块遍历文件夹,获取所有m文件的路径,然后根据指定的规则对m文件进行重写,并输出成新的m文件放在脚本目录下。 最后通过Python调用Matlab运行m脚本,输出结果到Python中,Python集中汇总输出。
这里的关键点之一是由于各个m文件的文件名是不同的,因此eng.xxx()是没有办法在运行前写死的。 必须根据读取的文件名动态生成Python语句然后运行。这对于传统编译型语言可能很难实现,但对Python解释型语言很容易实现。 在Python中有exec()函数可以实现这个需求,其中参数是需要执行的代码字符串。 项目部分代码如下:
def joinCode(new_names):codes = []for item in new_names:codes.append("res = eng." + item + "()")return codesdef execMatlab(codes, exs, ex2s, eys, ey2s):eng = matlab.engine.start_matlab()for code in codes:exec codeexs.append(res[0][0])ex2s.append(res[0][1])eys.append(res[0][2])ey2s.append(res[0][3])eng.quit()
项目中首先调用joinCode()函数根据new_names列表动态生成代码字符串存放在codes中。 然后调用execMatlab()函数依次执行每条语句。这里的res看似并没有在代码中定义,而且在IDE中确实也会报错,说未定义。 但是其实它是在动态执行的代码中定义的,因此执行时是不会报错的。
顺带提一下,在Python中,执行系统命令调用的是os.system()函数。参数就是需要执行的代码。 而且这个函数对于Windows和Linux都适用,是跨平台的。类似于os.walk()等内置函数,都是抽象后的与系统无关的函数。 下面的代码是用于执行动态系统代码的例子:
def exeCMD(cmds):for i in range(cmds.__len__()):print "\n---------------------------------------------------------------------"print "Executing:", cmds[i]os.system(cmds[i])print "---------------------------------------------------------------------\n"print "**********", ((i + 1) * 1.0 / len(cmds)) * 100, "% finished.**********"print "**********100 % finished.**********"
最后,可以import platform包,可以获取系统类型。如下函数是判断当前是什么系统,从而自动决定是使用哪种路径分隔符。
def getOSType():sysstr = platform.system()if (sysstr == "Windows"):separator = "\\"elif (sysstr == "Linux"):separator = "/"return separator
相关文章:
软件杯 深度学习花卉识别 - python 机器视觉 opencv
文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &a…...
【功耗仪使用】
一,功耗仪使用 1.1,功耗仪外观及与手机,电脑连接方式 power monitor设备图 同时power monitor设备的后端有一个方形插孔通过数据线与电脑主机USB接口相连接,圆形插孔为电源插孔,用来给power monitor设备通电 pow…...
2024 年 5 月 7 日 周二 晴 常(324 字)
正文早上两头跑应付工作时,客户部的同事说我像被吸干了阳气。没办法啊,觉没睡够不就应该这样吗…… 休息好了肯定不这样。另外,才知道这周六补班,那一瞬间有些想死(笑。文竹的末端叶子好像还是没有变绿呢。有些担心。或许应该有点耐心?鱼儿的手机似乎坏了,于是也买了一个…...
浅谈程序员的实用神器
作为一个程序员,有很多实用的工具和资源可以帮助我们提高工作效率和解决问题。以下是一些常用的程序员实用神器: 集成开发环境(IDE):如Visual Studio Code、PyCharm、Eclipse等,提供代码编辑、调试、版本控…...
访问framework中hide方法
经常大家会做安卓系统开发工作问到一个问题,那就是我如果framework代码中增加了一个方法啥的,但是我又不想公开给第三方应用知道,只想让我系统的应用知道,那该怎么办呢?其实这个时候经常就会用到一个hidden的标签,来代表这个方法是隐藏方法,隐藏方法就是给系统内部用的,…...
微软正在自主构建一个名为 MAI-1 的大型语言模型(不依赖 OpenAI)
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
Python与Matlab混合编程案例
前言因为项目需要,需要批处理很多Matlab的.m文件,从每个文件中提取结果合并到一个文件中。 很明显,如果手工统计,几百个文件会累死的。 因此立即想到了Python在批处理方面的优势,因此就在网上找了相关资料,…...
stack、queue、priority_queue
容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 其中stack和queue都是容器适配器,其中stack可以封装vector、list以及我们…...
高通平台开发系列讲解(GPS篇)gpsONE 系统架构
文章目录 一、系统架构图二、gpsONE系统组成三、gpsONE交互流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢高通的定位系统模块,名称叫gpsONE。 一、系统架构图 二、gpsONE系统组成 GPS系统架构可以分为六个部分: APP层Framework Client端(LocationManager API…...
zkMove——针对Move合约生态的zkVM
1. 引言 Move为不同于Solidity的,开源的安全的智能合约开发语言,最早由Facebook为Diem链创造开发。不过,Move本身设计为与平台无关的语言,具有通用的库、工具,并使得采用完全不同数据模型和执行模型的链的开发者社区都…...
贪心算法的题目
每一步都做出一个局部最优的选择,最终的结果就是全局最优 只有一部分问题才能用贪心算法(严格来讲,一个问题能不能用贪心算法需要证明的) 2022.8.30 蔚来笔试题: 有a个y,b个o,c个u,用这些字母拼成一个字符串…...
线程控制--Linux
文章目录线程理解线程的优点与缺点进程的多个线程共享线程控制线程创建线程终止线程等待线程分离总结线程理解 谈及线程,就不得不谈起进程与线程的关系了。学习完前面有关进程的知识,之前我们对进程的定义是:内核数据结构代码和数据。但是今…...
17 | 如何做好面试复盘?将经验提升为能力
前言 前言:面试是最好的查漏补缺机会,做好面试复盘又是十分的重要。 文章目录前言一. 关于复盘1. 什么是复盘(What)2. 复盘的目的(Why)3. 什么时候需要复盘(When)4. 怎么进行复盘&am…...
数据结构-树
1. 二叉树遍历 #include <stdbool.h> #include "stdio.h" #include "stdlib.h"typedef struct TNode *Position; typedef Position BinTree; // 二叉树类型 typedef char ElementType;// 树结点定义 struct TNode {ElementType Data; // 结点数据Bin…...
Python3 循环语句
本章节将为大家介绍 Python 循环语句的使用。 Python 中的循环语句有 for 和 while。 Python 循环语句的控制结构图如下所示: while 循环 Python 中 while 语句的一般形式: while 判断条件(condition):执行语句(statements)…… 执行流程…...
时序数据处理中的拟合问题
对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差),同时也希望它可以对未知数据集(测试集)有很好的拟合结果(泛化能力),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(…...
[数据结构基础]排序算法第一弹 -- 直接插入排序和希尔排序
目录 一. 排序的概念及分类 1.1 排序的概念 1.2 常见的排序算法 二. 直接插入排序 2.1 直接插入排序的实现逻辑 2.2 直接插入排序的实现代码 2.3 直接插入排序的时间复杂度分析 三. 希尔排序 3.1 希尔排序的实现逻辑 3.2 希尔排序实现代码 3.3 希尔排序的效率测试 …...
厚积薄发打卡Day115:Debug设计模式<简单工厂、工厂方法、抽象工厂>
厚积薄发打卡Day115:Debug设计模式<简单工厂、工厂方法、抽象工厂> 简单工厂 定义 由一个工厂对象决定创建出哪一种产品类的实例(严格意义并不是设计模式,更是一种风格) 类型:创建型,但不属于GOF…...
python元组
python元组 文章目录python元组一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建元组2.访问元组3.修改元组4.删除元组5.索引及截取6.元组运算符7.内置函数总结一、实验目的 掌握元组的用法 二、实验原理 Python 的元组与列表类似,不同之处在…...
gcc中预定义的宏__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__
今天在看Linux系统编程这本书的代码的时候看到了__GNUC__,不太清楚这个宏所以去查了一下,以此记录。GNU C预定义了一系列的宏,这些宏都是以双下划线开始的,这里只讲一下__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__,完…...
AxMath使用教程(持续更新中)
前言 这两天学了学Latex,主要是为了以后写毕业论文做铺垫,而且Latex在数学公式这一方面,要比Word方便许多,于是我就下载了一款国产的公式编辑器——AxMath。永久会员不贵,只要36元,而且软件很好用…...
day11 栈和队列 | 20、有效的括号 1047、删除字符串中的所有相邻重复项 150、逆波兰表达式求值
题目 20、有效的括号 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序…...
【前端面试】http面试整理
"一问一答"模型的协议 客户端通过http请求;服务器端根据请求返回客户想要的资源;客户端接收到资源;http是什么 HTTP是超文本传输协议,是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约…...
倒霉倒霉倒霉(传送门 bfs 三维数组 递归 综合运用
题目描述“啊!倒霉倒霉倒霉~”龙叔被困在一座大厦里了,可恶的瓦龙把这座大厦点燃了,他借机消灭龙叔。这座大厦有L层,每一层都有R*C个房间。熊熊火焰蔓延十分快,有的房间已经着火了,龙叔没办法通过。这时老爹…...
C++函数定义和调用介绍
C函数定义和调用介绍 函数的意义:利用率高,可读性强,利于移植。 一个C程序中主函数有且只有一个,是程序的入口,而函数(或称子函数)可以有很多。 每个 C 程序都至少有一个函数,即主…...
手把手带初学者快速入门 JAVA Web SSM 框架
博主也是刚开始学习SSM,为了帮大家节省时间,写下SSM快速入门博客 有什么不对的地方还请 私信 或者 评论区 指出 只是一个简单的整合项目,让初学者了解一下SSM的大致结构 项目先把框架写好,之后在填写内容 项目压缩包 完整的蓝奏…...
RocketMQ源码本地搭建调试
1 GitHub源码 git clone https://github.com/apache/rocketmq.git导入IDEA,可在命令行执行mvn compile一下,保证源码能够正确编译。本次我使用的master分支的版本-4.8.0。下面我们开始准备启动Namesrv。 2 启动Namesrv 到namesrv模块找到NamesrvStart…...
Axios 二次封装并使用
index.js import axios from "axios";let token localStorage.getItem("token"); // let token "123213"; class Request {// 自定义变量instance;constructor(config) {// console.log(config)// 创建axios 实例,变量接收this.in…...
【SpringCloud】Nacos集群搭建
集群结构图官方给出的Nacos集群图如下:其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们接下来要尝试 Nacos集群搭建,效果图如下所示:三个nacos节点的地址:节点ipportnacos1l…...
【CSDN的2022与2023】普普通通的三年,从懵懂、焦虑到坚定、奋进,破除焦虑努力成为更好的自己
大家好,我是黄小黄!一名普通的软件工程在读学生。最近终于闲下来了一丢丢!借着休息之余,来写一篇年度总结散散心~与其说是年度总结,不如说是给大学生活与莽莽撞撞的自己一个交代叭! 这些都是小标题~碎碎念1…...
k8s单机版使用本地存储local-path-provisioner
在k8s单机环境中,我们经常使用本机路径作为持久化存储。在k8s官方文档中有两种方式使用本机存储,一种是hostPath,另一种是local volume,这两种都不支持动态扩容,并且程序移植改动比较大,而local-path-provi…...
MySQL优化(1)执行计划explain中type属性详解
系列文章目录1.初始化测试数据1.初始化表格(user表)2.初始化表格(product表)3.初始化表格(user表数据初始化)4.初始化表格(product表函数)5.初始化表格(product表数据初始…...
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别servlet过滤器1.filter过滤器的含义2.filter过滤器的使用3.测试-过滤字符编码正确响应中文编码3.1 创建servlet用于显示中文字符3.2 自定义过滤器3.3 配置web.xml中的servlet映射以及过滤器请求拦截3.4 运行输出…...
Java链表OJ题
目录1. 删除链表中等于给定值val的所有结点2. 逆置单链表3. 链表的中间结点4. 链表中倒数第k个结点5. 将两个有序链表合并为一个新的有序链表6. 以给定值x为基准将链表分割成两部分7. 判断是否为回文链表8. 两个链表的第一个公共结点9. 判断链表中是否有环10. 链表开始入环的第…...
0、Spring工程构建Spring快速入门Spring配置文件详解注入Sprint相关API
1、Spring工程构建 创建工程项目目录文件夹 IDEA选择项目new一个module 配置案例 aop创建 创建并下载完毕后,点击file选择projert 选择按照的jdk版本 output选择当前目录, 点击右下方apply 选择facets,点击""号选择web 选择当前…...
网络原理之HTTP/HTTPS、TCP、IP四层协议栈
文章目录一、应用层(一)xml协议(二)json协议(三)protobuffer协议(四)HTTP协议1. 抓包工具,fiddler2. HTTP报文格式3. HTTP请求(Request)(1)URL基本…...
CS61B 2021spring HW0
HW 0: A Java Crash Course 文章目录HW 0: A Java Crash CourseA Basic ProgramCreative Exercise 1a: Drawing a TriangleCreative Exercise 1b: DrawTriangleExercise 2、3Optional: Exercise 4Java可视化orz表达积累参考资料这个hw是optional,然后主要是给至少学…...
自动驾驶环境感知——视觉传感器技术
文章目录1. 摄像头的成像原理1.1 单目视觉传感器的硬件结构1.2 单目视觉的成像原理 –小孔成像模型1.3 单目视觉的成像原理 – 像素坐标系1.4 单目视觉三维坐标系转换 – 外参1.5 单目视觉的坐标系转换 – 从世界坐标点到像素坐标1.6 单目视觉的特性2. 视觉传感器的标定2.1 视觉…...
分享148个ASP源码,总有一款适合您
ASP源码 分享148个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 148个ASP源码下载链接:https://pan.baidu.com/s/1e2PvBmXxZA8C3IelkP8ZtQ?pwdj7lp 提取码&#x…...
Java线程的生命周期的五种状态
前面在《有关Java多线程的几个概念》(https://blog.csdn.net/helloworldchina/article/details/128753898)讲述了Java线程的生命周期的五种状态。在这里再详述一下线程的5种状态。 在java中,任何对象都要有生命周期,线程也一样&a…...
springboot自定义拦截器的简单使用和一个小例子
springboot自定义拦截器的使用1. 自定义拦截器2. 拦截器登录验证的小demo2.1 配置pom.xml2.2 创建User的bean组件2.3 创建需要的表单页面以及登录成功的页面2.4 编写controller映射关系2.5 自定义拦截器类,实现intercepetor接口2.6注册添加拦截器,自定义…...
APT之木马静态免杀
前言 这篇文章主要是记录手动编写代码进行木马免杀,使用工具也可以免杀,只不过太脚本小子了,而且工具的特征也容易被杀软抓到,指不定哪天就用不了了,所以要学一下手动去免杀木马,也方便以后开发一个只属于…...
设计模式 - 创建型模式_抽象工厂模式
文章目录创建型模式概述Case场景模拟工程模拟早期单机Redis的使用Bad ImplBetter Impl (抽象⼯⼚模式重构代码)定义适配接⼝实现集群适配器接口代理方式的抽象工厂类单元测试小结创建型模式 创建型模式提供创建对象的机制, 能够提升已有代码…...
9、断点调试
文章目录9、断点调试9.1 为什么需要Debug9.2 Debug的步骤1 添加断点2 启动调试3 单步调试工具介绍9.3 多种Debug情况介绍1 行断点2 方法断点3 字段断点4 条件断点5 异常断点6 线程断点7 强制结束9.4 自定义调试数据视图9.5 常见问题【尚硅谷】idea实战教程-讲师:宋红…...
yolo结构介绍
更新中 yolo结构: 这个是针对最早的v5版本1.0进行讲解,现在2022最新版本是V6.2。有一些细节的差别比如Backbone部分Focus倍替换成6*6的Conv,bottleneckCSP替换为C3,Neck部分SPP被替换成SPPF等 Release v1.0 ultralytics/yolov5 (github.com) # parameters nc: 80 # n…...
大数据技术架构(组件)7——Hive:Filter PushDown Cases And Outer Join Behavior
1.2、Filter PushDown Cases And Outer Join Behavior前提:关闭优化器set hive.auto.convertjoinfalse; set hive.cbo.enablefalse;Inner Join:1、Join On中的谓词: 左表下推、右表下推2、Where谓词:左表下推、右表下推-- 第一种情况: join on 谓词 selectt1.user_id,t2.user_i…...
【MySQL】第十二部分 子查询
【MySQL】第十二部分 子查询 文章目录【MySQL】第十二部分 子查询12. 子查询12.1 单行子查询12.2 多行子查询12.3 非相关子查询和相关子查询12.4 EXISTS 与 NOT EXISTS关键字总结12. 子查询 子查询 说白了就是嵌套查询,在一个查询语句中嵌套另外一个查询语句进行内部查询. 子…...
Day08 C++STL入门基础知识五——vector容器(下) 插入删除-数据存取-交换容器-预留空间【全面深度剖析+例题代码展示】
More haste, less speed. 欲速则不达 文章目录1. 承接上文2. 插入操作2.1 函数原型(总括)2.2 尾插尾删2.2.1 操作2.2.2 代码展示2.2.3 测试结果2.3 迭代器插入2.3.1 操作2.3.2 代码展示2.3.3 测试结果2.4 think小思考2.4.1 小疑问2.4.2 思路2.4.3 代码展示2.4.4 测试结果3. 删除…...
打工人必知必会(二)——劳动合同解除
目录 1、劳动合同的解除种类 2、协商解除劳动合同 3、用人单位解除劳动合同 1)过错性解除劳动合同 2)非过错性解除劳动合同 4、经济性裁员解除劳动合同 5、违法解除劳动合同 6、 劳动者解除劳动合同 提前30日以书面形式通知用人单位 员工即时解…...
量化选股——基于多因子模型的量化策略(第1部分—因子测算策略构建)
文章目录1.多因子模型概述2.因子挖掘3.多因子策略4.多因子策略构建基于多因子的策略通用流程Fama-French三因子因子效果测算方法因子测算结论&量化策略构建东西有点多,拆开成多个文章,边写边整合~,应该会分成2部分: 第1部分—…...
(Java高级教程)第四章必备前端基础知识-第三节1:JavaScript简介和基础语法
文章目录一:JavaScript简介(1)JavaScript概述(2)JavaScript特点(3)JavaScript运行过程(4)JavaScript组成(5)JavaScript的引入方式和基本使用&…...
好的质量+数量 = 健康的创作者生态
缘起 CSDN 每天都有近万名创作者发表各种内容, 其中博客就有一万篇左右。 这个数量是非常可喜的,这也是 CSDN 的产品、研发运营小伙伴、和各位博主持续工作的结果。 衡量一个 IT 内容平台,除了数量之外,还有另外一些因素…...
利用Golang可选参数实现可选模式
本文讨论Golang函数可选参数及函数类型,以及如何利用可选函数类型实现可选模式。同时通过构造函数作为示例,实现强大带可选参数的构造函数,让代码更直观、灵活、支持扩展。 从需求开始 可选参数给函数传递额外参数扩展或修改其行为…...
【Git】Git 的基本使用
Git的简介 Git是一个版本管理控制系统(缩写VCS),是一个工具,github或者gitee是git命令行工具的网站化。它可以在任何时间点,将文档的状态作为更新记录保存起来,也可以在任何时间点,将更新记录恢复回来。 git的诞生历…...
MyBatis(一)MyBatis概述
一、什么是框架 ● 在文献中看到的framework被翻译为框架 ● java常用的框架: SSM三大框架:SpingSpringMVCMyBatisSpringBootSpringCloud● 框架其实就是对通用代码的封装,提前写好了一堆接口和类,我们可以在做项目的时候直接引…...
吴恩达机器学习笔记(三)逻辑回归
机器学习(三) 学习机器学习过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。 —— 吴恩达机器学习第五章 —— 四、逻辑回归 线性回归局限性 线性回归对于分类问题的局限性:由于离群点…...
go Gin项目实战
Gin项目实战 Gin博客项目-项目架构Gin博客项目-集成gormGin博客项目-集成Bootstrap创建用户表单Gin 博客项目-实现控制器和路由Gin 博客项目-设计静态页面Gin 博客项目-用户注册Gin 博客项目-用户登录Gin 博客项目-集成markdown编辑器Gin 博客项目-创建博客模型和DAOGin 博客项…...
新建的springBoot WEB项目无法自动返回html模版(gradle+kotlin版本)
最近研究了springBoot创建web项目, 第一步服务端返回字符串没有问题,第二步返回html时,还是返回的字符串。 文章目录 一、参考方案二、新建springBoot web项目三、启动项目的三种方式 一、参考方案 将控制器类的 RestController 改为 Contro…...
DDR5:新一代内存技术解析(讲解篇)
序 随着科技的飞速发展,计算机硬件的性能也在不断提升。作为计算机核心部件之一的内存,其技术的更新换代对于整个计算机系统性能的提升至关重要。DDR5作为新一代的内存技术,其在速度、带宽、容量、功耗以及纠错能力等方面都有着显著的提升。本文将对DDR5的协议进行详细的解析…...
小猫咪邮件在线发送系统源码v1.1,支持添加附件
内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 小猫咪邮件在线发送系统源码v1.1,支持添加附件 一款免登录发送邮件,支持发送附件,后台可添加邮箱,前台可选择发送邮箱 网站数据采取本地保存&…...
从浏览器输入url到页面加载(十)接收到网卡数据的处理
上一节我们说到数据经过漫长的旅程,从客户端,到达了服务端。然后服务端的等待连接程序被开启,与客户端建立了连接,这一节我们继续说。 目录 1 接收到的数据是什么样的? 2 网卡驱动被激活 3 达到协议栈...
[Android]常见的包管理方式
在Android开发中,包管理主要是通过构建和依赖管理工具来处理。下面列举了几种最常见和主流的包管理方式: 一、Gradle Gradle 是 Android 官方推荐的构建工具,几乎成为了 Android 开发的标准。它支持自定义构建逻辑、依赖管理、多项目构建等…...
【vue3-pbstar-big-screen】一款基于vue3、vite、ts的大屏可视化项目
vue3-pbstar-big-screen是一款基于vue3、vite、ts的大屏可视化项目,项目已内置axios、sass,如element、echarts等需要自行安装。 屏幕适配方案 本项目主要通过transform: scale()缩放核心区域实现屏幕适配效果 //html <div class"container-wr…...
【经验总结】Vue2中的全局变量(store
需求场景 需要在vue中存储一个可变的,可读写的全局变量在不同的js、页面中均可调用和读写 技术:使用vue的store 用法总结 一、定义变量 1、找到vue的/src/store路径,在modules文件夹下创建文件(这里便于测试创建demo.js&…...
【ITK配准】第七期 尺度(Metric)-互信息Metric
很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中的互信息Metric,即itk::MutualInformationImageToImageMetric & itk::MattesMutualInformationImageToImageMetric,,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点…...
iframe通信postMessage
iframe嵌入页面是实现微前端的方式之一。由于浏览器的跨域限制,iframe与父页面之间的通信变得不是那么容易。postMessage解决了这个问题。从广义上讲,一个窗口可以获得对另一个窗口的引用(比如 targetWindow window.parent)&…...
灌溉排涝乙级升甲级:关键岗位人才储备与引进
在灌溉排涝企业从乙级资质升级到甲级资质的过程中,关键岗位人才储备与引进是确保升级成功的重要因素。以下是一些关于关键岗位人才储备与引进的建议: 一、明确关键岗位与人才需求 首先,企业需要明确哪些岗位是关键岗位,这些岗位…...
通义千问免费新功能:EMO,让照片和视频“活”起来
🧙♂️ 诸位好,吾乃斜杠君,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &#…...