C语言实现实数和复数矩阵及其各种运算(一)
一、前言
最近在企业实习,花了三个星期的时间肝了一个室内定位算法(雏形,还未优化),实现matlab和C的联写、联调,其难点笔者认为在于矩阵的各种运算,C++中有Eigen库可用,以前在学slam和做课题时候在Ubuntu下用过一段时间的Eigen,功能强大,提供了各种典型的matrix计算接口,但是在C中,需要我们自己编写每个功能模块。算法核心代码matlab只有大概100行(这里容我再次感叹matlab真是为matrix计算而生,逆天强大),但是C我写了大概有1500多行。谨以此连载文档记录一下算法开发的关键–复数矩阵运算的实现。
网上关于C语言实现矩阵运算的demo较多,但是大体都不够完整和准确,很多function直接git下来各种问题,且用起来没有统一的标准,另外,只在实数域(Double)内讨论,但是我们知道在算法领域,很多矩阵运算都涉及到复数(Complex)运算,复数域内矩阵运算其实与实数域还是有很大区别的(PS:这也是我在写C程序时候遇到的坑,之后本文会一一介绍)。
因此,在本连载文章中,我将完全使用C语言完成对矩阵的定义、内存初始化、访问索引、内存销毁的基本功能,更重要的是编写求取代数余子式、行列式、逆矩阵、协方差矩阵、特征值、特征向量等功能函数。所有函数demo我都单独拿出来仔细讲解,并结合matlab,编程对比验证demo正确性,大家可以放心阅读和使用。
二、知识储备和编程工具
1. 知识储备:熟练C语言,精通指针、数组等C语言“灵魂”知识;2. IDE工具:Visual Studio2019Community; MATLAB2019a;3. C相关头文件:complex库
三、矩阵的定义
注意到社区内有小伙伴用二维数组来定义一个矩阵,但是矩阵并不总是二维的,在matlab里面,矩阵可以是N维的,若是试图用更高维度的数组去完成定义,在后续的访问矩阵/数组元胞时候显得非常冗余。虽说C是结构化程序设计语言,但一定的“鲁棒性”也是需要的。另外我是用C++和matlab居多,所以总是或多或少在编程时候有一定的C++的思想。后者面向对象,具有类模板和模板函数。
PS:在之后贴出来的code中,我都会分别给出Double和Complex两份demo,以及调用到的complex库文件的相关函数接口说明。
1.头文件
# include <complex.h> // Complex Numbers# include <stdlib.h> // malloc/free, et.al
说明:
关于复数头文件,C11开始提供了大量函数接口,这里我只对用到的单独拿出来讲一下。有兴趣的可以点开源文件看看都有什么内容。首先是定义,源文件见下:
#ifndef _C_COMPLEX_T#define _C_COMPLEX_Ttypedef struct _C_double_complex{double _Val[2];} _C_double_complex; // This is what I needtypedef struct _C_float_complex{float _Val[2];} _C_float_complex;typedef struct _C_ldouble_complex{long double _Val[2];} _C_ldouble_complex;#endiftypedef _C_double_complex _Dcomplex; // This is what I needtypedef _C_float_complex _Fcomplex;typedef _C_ldouble_complex _Lcomplex;
简而言之,complex.h头文件通过定义一个结构体来表示一个复数。具体说来,结构体内部成员是一个一维数组,存储两个数据,由该数组来储存复数的实部(real)和虚部(imaginary),根据实/虚部浮点精度不同定义了三种数组,分别是double、float、long double,对应定义了三种结构体类型,再对应每个function都定义了三个函数。谨记,这三种常规类型指的是复数的实部和虚部的数据类型。算法中,我用到的是double类型。所以以下涉及到复数运算的我都只调用了complex.h头文件中跟double类型相关的函数。
2.定义
这里我用一个结构体来完成对矩阵的定义和“模拟”。
typedef _Dcomplex ComplexType; // Complex Variablestypedef double DoubleType; // Double Variables/* Complex Cell */typedef struct // Matrix Structor{int row, column; // SizeComplexType* arrayComplex; // Pointer to Cell}Matrix;/* Double Cell */typedef struct{int row, column;DoubleType* arrayDouble;}Matrix2Double;/* bool */typedef enum { False = 0, True = 1 }Bool;
说明:
(1) 虽然complex.h头文件内已经对复数类型_C_double_complex取了别名_Dcomplex,为了区别double和complex,我对二者再次取了一个别名,遵守Google命名规则,随后的定义矩阵的两个结构体类型和bool变量的枚举类型同理;
(2) 重点来了,两种不同元素类型的矩阵,我定义了两个结构体,一个是元胞是实数类型的,一个是复数类型的。结构体内部两个int类型的member代表的是矩阵的行数(row)和列数(column),指针member用于指向存储元素/元胞(cell)的一段内存,因此矩阵元胞可以用指针来进行访问和遍历,此时内部数据结构指针是1D的,但却可以表示2D及以上的矩阵,从这里可以看到指针代替数组的优越性;
(3) 最后,笔者还定义了一个枚举类型,后续的用于安全机制的函数有用到;
(4) 可以看到,两个不同类型的矩阵其结构体其实完全一样,只是内部指针变量类型不一样。
3.初始化内存分配
首先是写一个对一个复数进行初始化的函数,因为复数也是一个结构体,当定义一个复数变量时候,最好也对其进行初始化。此外,后续涉及到复数的累加累乘,因此也需要对其赋值和初始化:
/* Initiation of Complex Number */void InitComplex(ComplexType* Complex) // Transfer of Pointer{Complex->_Val[0] = 0.0;Complex->_Val[1] = 0.0;}
然后是对矩阵进行初始化:
/* Initiation of Complex Matrix */void InitComplexMatrix(Matrix* matrix, int row, int column) // Transmiss of Pointer{int size = row * column * sizeof(ComplexType);if (size <= 0){puts("ERROE: An invalid matrix!\n");return;}matrix->arrayComplex = (ComplexType*)malloc(size); // initiate pointerif(matrix->arrayComplex){matrix->row = row; // initiate row and sizematrix->column = column;for (int index = 0; index < row * column; index++) // initiate cell{InitComplex(matrix->arrayComplex + index); // call InitComplex() function}}}/* Initiation of Double Matrix */void InitDoubleMatrix(Matrix2Double* matrix, int row, int column){int size = row * column * sizeof(DoubleType);if (size <= 0){puts("ERROE: An invalid matrix!\n");return;}matrix->arrayDouble = (DoubleType*)malloc(size);if (matrix->arrayDouble){matrix->row = row;matrix->column = column;for (int row_i = 0; row_i < row; ++row_i){for (int column_j = 0; column_j < column; ++column_j){matrix->arrayDouble[row_i * matrix->column + column_j] = 0.0;}}} }
说明:
(1) 矩阵初始化涉及到确定矩阵row/column的大小、初始化元胞,也就是对结构体变量进行初始化赋值,其核心是对指针动态申请一段内存,采用的是malloc()函数,包含在头文件stdlib.h中;
(2) 用指针访问/遍历(iteration)矩阵元胞,其实也就是指针指向的每个单元内保存的数,在initiate cell环节,这里其实有三种表示方式,主要是指针访问元素、矩阵访问元胞具有不同的方式。后续访问元素/元胞时候我都是随机选一种写的(sorry,我当时写代码时候这些都不是重点,所以想到哪种写哪种),但是为了避免读者阅读混乱,这里,笔者都给出来:
// Solution_1for (int index = 0; index < row * column; index++) // initiate cell{InitComplex(matrix->arrayComplex + index);}// Solution_2for (int index = 0; index < row * column; index++){InitComplex(&(matrix->arrayComplex[index]));}// Solution_3for (int row_i = 0; row_i < row; ++row_i){for (int column_j = 0; column_j < column; ++column_j){InitComplex(matrix->arrayComplex + row_i * matrix->column + column_j);}}
(3) 另外,为了安全起见,我还加入了两个if语句,可以进一步减少最后compile时出现的各种堆栈溢出等内存bug和exception,比如free掉已经不存在的内存或者malloc失败的内存,也就是C语言使用指针出现的野指针和堆错误;
(4) double类型的矩阵类同complex类型,甚至在初始化值时候还要简单一点,因为每个double元胞只有一个元素,而complex有实部和虚部两个。
4.内存销毁
我们知道在Linux内,malloc()和free()系统函数总是成对出现,有内存申请必有内存的释放,同样在VS下,利用一个结构体变量定义了一个矩阵之后,调用了malloc()函数申请了一段memory,故而需要释放:
/* Validity of Complex Matrix */Bool IsNullComplexMatrix(const Matrix* matrix){int size = matrix->row * matrix->column;if (size <= 0 || matrix->arrayComplex == NULL){return True;}return False;} /* Free Memory of Complex Matrix */void DestroyComplexMatrix(Matrix* matrix){if (!IsNullComplexMatrix(matrix)) // Nested Call of IsNullComplexMatrix(){free(matrix->arrayComplex); // Pair: malloc--freematrix->arrayComplex = NULL;}matrix->row = matrix->column = 0;}/* Validity of Double Matrix */Bool IsNullDoubleMatrix(const Matrix2Double* matrix){int size = matrix->row * matrix->column;if (size <= 0 || matrix->arrayDouble == NULL){return True;}return False;}/* Free Memory of Double Matrix */void DestroyDoubleMatrix(Matrix2Double* matrix){if (!IsNullDoubleMatrix(matrix)){free(matrix->arrayDouble); matrix->arrayDouble = NULL;}matrix->row = matrix->column = 0;}
说明:
(1) 首先,定义一个IsNullComplexMatrix()函数用于判断矩阵是否初始化成功,主要判断结构体内部的member是否初始化成功(体现在矩阵,就是行列数和内存)。属于保障内存安全的操作。看到没,这里我就调用了前文说到的Bool枚举类型成员;
(2) 之后,定义一个DestroyComplexMatrix()函数释放结构体内部的member,即嵌套调用free()释放掉指针成员指向的内存,并置为NULL(这步虽然不是必须的但是笔者建议各位读者每次都加上),再将两外两个int类型的member变量置为0;
(3) 关于double类型,同样给出,不再赘述。
(4) 补充一点,在我的算法框架中,出现了大量矩阵的定义,也就是多次内存的申请和释放,甚至在几个核心的算法函数内部,出现了二十个以上的矩阵,要是每个矩阵调用一次初始化和销毁函数,会严重影响编程美观和效率。因此,我又写了几个初始化(initiate)和内存销毁(destroy)函数,其目的是一次性只调用一个函数将我需要的所有的矩阵进行内存的申请和释放。当然,这个功能只在我的具体算法场景下用得到,所以我只是做一个补充拓展贴出来,另外,我只给出内存销毁函数,后续我会依次写demo验证一下这个function:
/* Free Memory of Complex Matrice Array */void DestroyComplexMatrixArray(Matrix matrixArray[], int num) // Array Transfer--->Pointer Transfer{if (num) // if no matrix{for (int i = 0; i < num; i++){DestroyComplexMatrix(&matrixArray[i]); // Nested Call of DestroyComplexMatrix()}}}/* Free Memory of Double Matrice Array */void DestroyDoubleMatrixArray(Matrix2Double* matrixArray, int num){if (num) // if no cell{for (int i = 0; i < num; i++){DestroyDoubleMatrix(&matrixArray[i]);}}}
5.获取矩阵行、列、元胞数目
这里我也定义了三个函数用于返回相应的值:
/* Return Matrix Row Size */
int MatrixRow(const Matrix* matrix)
{return matrix->row;
}
/* Return Matrix Column Size */
int MatrixColumn(const Matrix* matrix)
{return matrix->column;
}
/* Return Complex Matrix Size */
int MatrixSize(const Matrix* matrix)
{return MatrixRow(matrix) * MatrixColumn(matrix) ; // Size Refers to Numbers of Cell of Matrix
}
说明:
(1) 由于这里的矩阵笔者用的结构体来~~“模拟”~~ 实现,我们为了让矩阵看起来”更像“我们数学中那样的“格式”,数学美学要用计算机实现,还是定义了相关函数来返回我们要的量,因此事实上,可以直接采用如下格式直接获取:
matrix->row;
matrix->column;
matrix->row * matrix->column;
四、总结
这是第一章节的内容,整体上来讲,只是为了完成矩阵的定义、初始化、内存销毁等,但是非常重要,因为后续的所有矩阵运算函数和接口都基于此,事实上,我遇到的很多问题都是出现在这一部分。为后续方便读者阅读,或者帮助读者编程时候排雷,笔者对个人编程习惯和这部分遇到的坑做个总结:
- 尽量写void类型的函数,避免在函数内部定义local variable,也就是局部矩阵,频繁调用初始化和销毁函数,造成计算机内存频繁的申请和释放;
- 函数形参尽量定义为指针类型,尤其是矩阵/结构体变量,因为是void函数,没有return返回值,因此用传地址方式而不能采用传值操作,避免出错;
- 调用函数时候,实参尽量定义为一般变量,尤其是矩阵/结构体变量,这样可以避免结构体指针变量本身就需要分配和释放内存,关于这一点,由于笔者使用C语言编程经历真心不多,所以当时把实参也清一色定义为指针,造成后续在每个函数里面出现了大量结构体指针初始化、结构体内部指针初始化的操作,矩阵多了之后就很混乱,如果分配和释放不及时,会造成编译时候cast各种exception,这也是我当时遇到过的第一个大坑;
- 下一章我将详细给出实数、复数域上矩阵运算的函数。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 37. Python语言 的 MySQL数据库 之 第六章 SQL语句之操作数据
SQL语句之操作数据表本章主题关键词操作数据新增数据修改数据删除数据查询数据where子句比较运算符逻辑运算符模糊查询范围查询空判断常用聚合函数课后练习总结小便条 本章主题关键词操作数据 新增数据 整行插入 INSERT INTO 数据表名 VALUES(值1,值2,值3…); 指定列中插入数据…...
2024/4/29 23:16:56 - MATLAB文件操作
MATLAB文件操作1 处理二进制文件1.1 二进制文件I/O函数1.2 文件的打开和关闭1.2.1 文件打开1.2.2 文件关闭1.3 读取m文件1.4 读取TXT文件1.5 写入二进制文件2 处理文本文件2.1 读取文本文件2.2 写入文本文件3 参考资料 1 处理二进制文件 1.1 二进制文件I/O函数1.2 文件的打开和…...
2024/5/5 22:42:26 - 基于线性探测法的散列表 java
package ch03;import java.util.Iterator;//基于线性探测法的散列表 public class LinerProbingHashST<Key, Value> {private int N;private int M = 16;private Key[] keys;private Value[] values;public LinerProbingHashST() {this.keys = (Key[]) new Object[M];thi…...
2024/4/29 23:16:46 - VC6.0该名称不是一个有效的工程名称
工程名称中含有 ....
2024/4/29 23:16:42 - Kears中的可视化
1.使用 keras 中的Tensorboard实现可视化 注意:np.array ( ), 如果要使用数组的话,必须要用 【】1.对 .shape 的理解:从 第一个大括号 看最里面有多少层,从里往外看。 import numpy as npa=np.array([[1,2,3],[4,5,6]]) print(a.shape) print(a)b=np.array([1,2,3]) print(…...
2024/5/6 5:32:14 - 初识Vulkun(14):Vulkan术语
词汇表 缓冲区 用于存储图像信息的内存区域,这些信息可以是颜色、深度或混合信息。比如RGBA缓冲区统称为颜色缓冲区。 命令缓冲区 一个可以由设备执行的命令列表 帧缓冲区 一个包含图像引用的对象,图像在绘图管线渲染时用作附件。 视点坐标 基于观察者位置的坐标系统,把观察…...
2024/5/2 10:32:18 - tensorflow2 神经网络在能够满足准确率的时候退出
第一次:有问题的判断准确率的代码 import os os.environ[TF_CPP_MIN_LOG_LEVEL]=2 import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers, optimizers, datasets import numpy as np class myCallback(tf.keras.callbacks.…...
2024/4/29 1:18:18 - 07_ Laravel框架数据库操作
Laravel框架数据库操作按照MVV架构, 对数据库的操作应该放在model完成, 但如果不要model, 我们也可以用laravel框架提供的DB类操作数据库; 而且对于某些极其复杂的sql, 用model已经很难完成, 需要开发者自己手写sql语句, 使用DB类去执行原生的sqlLaravel中DB类的基本用法DB:tab…...
2024/4/30 9:28:09 - 考试策略
小明同学在参加一场考试,考试时间2个小时。试卷上一共有n道题目,小明要在规定时间内,完成一定数量的题目。 考试中不限制试题作答顺序,对于 i 第道题目,小明有三种不同的策略可以选择: (1)直接跳过这道题目,不花费时间,本题得0分。 (2)只做一部分题目,花费pi分钟的时…...
2024/4/29 23:16:30 - Python 实现 动态规划 /斐波那契数列
1、斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的…...
2024/4/29 23:16:26 - 面试浅谈之spring(一)
来说说什么是springspring是java企业的开源框架 更轻量 控制反正,实现松耦合 面向切面编程,把业务逻辑和系统服务分开 包含管理应用对象中的生命周期和配置 提供MVC框架 提供持续的事务管理接口,可以拓展上至本地事务,下到全局事务 提供方便的API把具体技术相关的异常转换为…...
2024/4/29 23:16:23 - 对Controller的理解以及resources mapping的理解
resources mapping的作用是什么,resources mapping的作用就是扫描包 当你想要扫描一WEB-INF下面的文件的时候,可以用resources mapping去扫描相对应的文件包,这里举个例子:我想要扫描这个WEB-INF下面的文件,就需要resources mapping去扫描,具体代码要这么写: <mvc:re…...
2024/4/29 23:16:19 - 三种算法解决跳跃问题(含动态规划)
3.3 跳跃问题(Jump Game) 3.3.1 问题描述 给定一个非负整数数组,初始状态你在数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。请判断,你最后是否能够抵达最后一个位置?3.3.2 暴力求解 算法思路: 设置一个新数组,遍历原数组,把元素能到达的位置都在…...
2024/4/29 23:16:14 - 【开发篇】10分钟快速上手spring boot+mybatis增删改查
【开发篇】10分钟快速上手spring boot+mybatis增删改查 github 首先来,温故而知新!!!之前的预备知识:10分钟快速上手git与github 10分钟快速上手springboot 10分钟快速springboot+react前后端分离复习完之前,那么接接下来乘风破浪吧!!!本次用IDEA带领你快速上手spring…...
2024/4/29 4:41:16 - 程序员面试被问项目经验不知怎么表达?你这样说,成功率高达90%
面试时7份靠能力,3份靠技能,而刚开始时的介绍项目又是技能中的重中之重,决定一次面试的成败,那么面试时如果介绍自己的项目呢?1、在面试前准备项目描述别害怕,因为面试官什么都不知道,面试官是人,不是神,拿到你的简历的时候,是没法核实你的项目细节的。更何况,你做的…...
2024/4/29 23:16:06 - SaltStack入门
saltstack介绍 SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。 通过部署SaltStack,我们可以在成千…...
2024/4/29 23:16:02 - 03. JVM 内存分配与回收策略
文章目录前言一、Minor GC 与 Full GC二、JVM 内存分配策略前言 Java 技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存; 回收分配给对象的内存。关于回收内存的部分我们已经在 GC 基础知识 中介绍了虚拟机中的垃圾回收体系以及运作原理,…...
2024/4/30 12:03:30 - CHROME扩展笔记之获取网站根域名
/** * 获取网站的根域名 */ function getMainHost() {var key = author_+Math.random();var keyR = new RegExp( (^|;)\\s*+key+=slongzhang@qq.com );var expiredTime = new Date( 0 );var domain = document.domain;var domainList = domain.split( . );var urlItems = []…...
2024/4/29 23:15:54 - R语言——三个数据集
第一章数据概览(1)三个数据集1.1 uspop 数据集为一组时间序列数据,从 1790 年至 1970 年,每隔 10 年取一个值1.2 Titanic 数据集记录了泰坦尼克号沉船事件中乘客年龄,性别,船舱等级,以及是否存活 4 项信息。1.3 Women 数据集是一张 15*12 的表格,相应存放着 15 个样本和…...
2024/5/4 19:18:59 - leetcode546. 移除盒子/动态规划
文章目录题目:546. 移除盒子基本思想1:动态规划基本思想2:dfs(超时了) 题目:546. 移除盒子 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续…...
2024/4/29 23:15:46
最新文章
- uniap之微信公众号支付
近来用uniapp开发H5的时候,需要接入支付,原来都是基于后端框架来做的,所以可谓是一路坑中过,今天整理下大致流程分享给大家。 先封装util.js,便于后面调用 const isWechat function(){return String(navigator.userA…...
2024/5/6 7:04:12 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - promise.all方式使用
romise.all( ).then( ) 处理多个异步任务,且所有的异步任务都得到结果时的情况。 比如:用户点击按钮,会弹出一个弹出对话框,对话框中有两部分数据呈现,这两部分数据分别是不同的后端接口获取的数据。 弹框弹出后的初…...
2024/5/2 21:09:45 - WPS二次开发专题:WPS SDK实现文档打印功能
作者持续关注WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 在办公场景或者家教场景中经常碰到需要对文档进行打印…...
2024/5/1 13:31:33 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/5/5 18:19:03 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/5/5 12:22:20 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/5/5 19:59:54 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/5/4 23:54:44 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/5/5 15:25:47 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/5/6 6:01:13 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/5/4 23:54:44 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/5/6 1:08:53 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/5/5 18:50:00 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/5/6 0:27:44 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/5/5 2:25:33 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/5/4 21:24:42 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/5/5 13:14:22 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/5/4 13:16:06 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/5/5 17:03:52 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/5/5 21:10:50 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/5/5 3:37:58 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/5/4 23:54:30 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/5/5 17:03:21 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/5/5 15:25:31 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57