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

多维数组与特殊矩阵:存储与压缩

多维数组与特殊矩阵:存储与压缩

一、多维数组的存储

(一)基本概念

多维数组是线性表的推广,例如二维数组可以看作是元素为一维数组的线性表,三维数组可以看作是元素为二维数组的线性表,以此类推。在内存中,多维数组需要按照一定的顺序进行存储,常见的存储方式有行优先存储和列优先存储。

(二)行优先存储

以二维数组为例,行优先存储是先存储第一行的元素,然后再存储第二行的元素,依此类推。对于一个 mn 列的二维数组 a[m][n],其元素 a[i][j] 在内存中的地址计算(假设每个元素占用 k 个字节,数组首地址为 base):
[LOC(a[i][j]) = base + (i * n + j) * k]

(三)列优先存储

列优先存储则是先存储第一列的元素,再存储第二列的元素等。对于上述二维数组,元素 a[i][j] 在列优先存储下的内存地址计算:
[LOC(a[i][j]) = base + (j * m + i) * k]

(四)C 语言示例

以下是一个在 C 语言中对二维数组进行初始化并计算其元素地址的示例:

#include <stdio.h>// 假设元素为 int 类型,每个 int 占 4 个字节
#define ELEMENT_SIZE 4// 计算行优先存储下元素的地址
int rowMajorAddress(int a[][100], int i, int j, int m, int n) {int base = (int)a;return base + (i * n + j) * ELEMENT_SIZE;
}// 计算列优先存储下元素的地址
int colMajorAddress(int a[][100], int i, int j, int m, int n) {int base = (int)a;return base + (j * m + i) * ELEMENT_SIZE;
}int main() {// 声明一个 3 行 4 列的二维数组并初始化int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};// 计算并打印行优先存储下元素 matrix[1][2] 的地址int rowAddr = rowMajorAddress(matrix, 1, 2, 3, 4);printf("行优先存储下 matrix[1][2] 的地址: %d\n", rowAddr);// 计算并打印列优先存储下元素 matrix[1][2] 的地址int colAddr = colMajorAddress(matrix, 1, 2, 3, 4);printf("列优先存储下 matrix[1][2] 的地址: %d\n", colAddr);return 0;
}

二、特殊矩阵的存储与压缩

(一)对称矩阵

  1. 存储特点
    • 对称矩阵是指 a[i][j] = a[j][i] 的矩阵。对于一个 n 阶对称矩阵,我们只需要存储其下三角(或上三角)部分的元素即可,因为根据对称性可以得到另一半元素的值。
  2. 存储方式
    • 可以将下三角部分按行优先存储到一个一维数组 sa 中。对于下三角元素 a[i][j]i >= j),其在一维数组中的下标 k 计算如下:
      [k=\frac{i(i + 1)}{2}+j]
  3. C 语言示例
// 存储对称矩阵的下三角部分到一维数组
void storeSymmetricMatrix(int a[][100], int sa[], int n) {int k = 0;for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {sa[k++] = a[i][j];}}
}// 根据一维数组恢复对称矩阵
void restoreSymmetricMatrix(int a[][100], int sa[], int n) {int k = 0;for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {a[i][j] = sa[k];a[j][i] = sa[k++];}}
}int main() {// 声明一个 4 阶对称矩阵并初始化int symmetricMatrix[4][4] = {{1, 2, 3, 4},{2, 5, 6, 7},{3, 6, 8, 9},{4, 7, 9, 10}};int sa[10];  // 用于存储对称矩阵下三角部分的一维数组// 存储对称矩阵下三角部分storeSymmetricMatrix(symmetricMatrix, sa, 4);// 恢复对称矩阵int restoredMatrix[4][4];restoreSymmetricMatrix(restoredMatrix, sa, 4);// 打印恢复后的对称矩阵,验证正确性for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {printf("%d ", restoredMatrix[i][j]);}printf("\n");}return 0;
}

(二)三角矩阵

  1. 上三角矩阵
    • 存储特点:上三角矩阵是主对角线以下元素全为 0 的矩阵。对于 n 阶上三角矩阵,我们可以只存储其主对角线及以上的元素。
    • 存储方式:按行优先存储主对角线及以上元素到一维数组 ua 中。对于上三角元素 a[i][j]i <= j),其在一维数组中的下标 k 计算如下:
      [k=\frac{(2n - i - 1)i}{2}+j - i]
    • C 语言示例
// 存储上三角矩阵到一维数组
void storeUpperTriangularMatrix(int a[][100], int ua[], int n) {int k = 0;for (int i = 0; i < n; i++) {for (int j = i; j < n; j++) {ua[k++] = a[i][j];}}
}// 根据一维数组恢复上三角矩阵
void restoreUpperTriangularMatrix(int a[][100], int ua[], int n) {int k = 0;for (int i = 0; i < n; i++) {for (int j = i; j < n; j++) {a[i][j] = ua[k++];if (j > i) {a[j][i] = 0;}}}
}int main() {// 声明一个 4 阶上三角矩阵并初始化int upperTriangularMatrix[4][4] = {{1, 2, 3, 4},{0, 5, 6, 7},{0, 0, 8, 9},{0, 0, 0, 10}};int ua[10];  // 用于存储上三角矩阵的一维数组// 存储上三角矩阵storeUpperTriangularMatrix(upperTriangularMatrix, ua, 4);// 恢复上三角矩阵int restoredUpperMatrix[4][4];restoreUpperTriangularMatrix(restoredUpperMatrix, ua, 4);// 打印恢复后的上三角矩阵,验证正确性for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {printf("%d ", restoredUpperMatrix[i][j]);}printf("\n");}return 0;
}
  1. 下三角矩阵
    • 存储特点:下三角矩阵是主对角线以上元素全为 0 的矩阵。
    • 存储方式:类似对称矩阵下三角存储,按行优先存储下三角元素到一维数组 la 中。对于下三角元素 a[i][j]i >= j),其在一维数组中的下标 k 计算同对称矩阵下三角元素存储下标计算:
      [k=\frac{i(i + 1)}{2}+j]
    • C 语言示例
// 存储下三角矩阵到一维数组
void storeLowerTriangularMatrix(int a[][100], int la[], int n) {int k = 0;for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {la[k++] = a[i][j];}}
}// 根据一维数组恢复下三角矩阵
void restoreLowerTriangularMatrix(int a[][100], int la[], int n) {int k = 0;for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {a[i][j] = la[k++];if (j < i) {a[j][i] = 0;}}}
}int main() {// 声明一个 4 阶下三角矩阵并初始化int lowerTriangularMatrix[4][4] = {{1, 0, 0, 0},{2, 5, 0, 0},{3, 6, 8, 0},{4, 7, 9, 10}};int la[10];  // 用于存储下三角矩阵的一维数组// 存储下三角矩阵storeLowerTriangularMatrix(lowerTriangularMatrix, la, 4);// 恢复下三角矩阵int restoredLowerMatrix[4][4];restoreLowerTriangularMatrix(restoredLowerMatrix, la, 4);// 打印恢复后的下三角矩阵,验证正确性for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {printf("%d ", restoredLowerMatrix[i][j]);}printf("\n");}return 0;
}

(三)对角矩阵

  1. 存储特点
    • 对角矩阵是指除主对角线及其相邻若干条对角线上的元素外,其余元素均为 0 的矩阵。以三对角矩阵为例,其主对角线以及主对角线上下各一条对角线上有非零元素。
  2. 存储方式
    • 可以将三对角矩阵的非零元素按行优先存储到一维数组 da 中。对于三对角矩阵中的元素 a[i][j],当 |i - j| <= 1 时为非零元素。其在一维数组中的下标 k 计算如下:
      [k = 3i - 1 + j - i = 2i + j - 1](当 (i = 0) 时,(k = j))
  3. C 语言示例
// 存储三对角矩阵到一维数组
void storeTriDiagonalMatrix(int a[][100], int da[], int n) {int k = 0;for (int i = 0; i < n; i++) {for (int j = i - 1; j <= i + 1; j++) {if (j >= 0 && j < n) {da[k++] = a[i][j];}}}
}// 根据一维数组恢复三对角矩阵
void restoreTriDiagonalMatrix(int a[][100], int da[], int n) {int k = 0;for (int i = 0; i < n; i++) {for (int j = i - 1; j <= i + 1; j++) {if (j >= 0 && j < n) {a[i][j] = da[k++];} else {a[i][j] = 0;}}}
}int main() {// 声明一个 5 阶三对角矩阵并初始化int triDiagonalMatrix[5][5] = {{1, 2, 0, 0, 0},{3, 4, 5, 0, 0},{0, 6, 7, 8, 0},{0, 0, 9, 10, 11},{0, 0, 0, 12, 13}};int da[14];  // 用于存储三对角矩阵的一维数组// 存储三对角矩阵storeTriDiagonalMatrix(triDiagonalMatrix, da, 5);// 恢复三对角矩阵int restoredTriMatrix[5][5];restoreTriDiagonalMatrix(restoredTriMatrix, da, 5);// 打印恢复后的三对角矩阵,验证正确性for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {printf("%d ", restoredTriMatrix[i][j]);}printf("\n");}return 0;
}

(四)稀疏矩阵

  1. 存储特点
    • 稀疏矩阵是指非零元素个数远小于矩阵元素总个数的矩阵。
  2. 存储方式 - 三元组顺序表
    • 可以使用三元组顺序表来存储稀疏矩阵。三元组顺序表包含三个一维数组,分别存储非零元素的行下标、列下标和值。
    • 首先定义三元组结构体:
typedef struct {int row;int col;int value;
} Triple;
  • 然后定义三元组顺序表结构体:
typedef struct {Triple data[100];int num;  // 非零元素个数
} SparseMatrix;
  • 存储稀疏矩阵到三元组顺序表的函数:
// 存储稀疏矩阵到三元组顺序表
void storeSparseMatrix(int a[][100], SparseMatrix *sm, int m, int n) {sm->num = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (a[i][j]!= 0) {sm->data[sm->num].row = i;sm->data[sm->num].col = j;sm->data[sm->num].value = a[i][j];sm->num++;}}}
}
  • 根据三元组顺序表恢复稀疏矩阵的函数:
// 根据三元组顺序表恢复稀疏矩阵
void restoreSparseMatrix(int a[][100], SparseMatrix sm, int m, int n) {for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {a[i][j] = 0;}}for (int k = 0; k < sm.num; k++) {a[sm.data[k].row][sm.data[k].col] = sm.data[k].value;}
}
  • C 语言示例
int main() {// 声明一个稀疏矩阵并初始化int sparseMatrix[5][5] = {{0, 0, 3, 0, 0},{0, 0, 0, 0, 0},{0, 6, 0, 0, 0},{0, 0, 0, 0, 9},{0, 0, 0, 0, 0}};SparseMatrix sm;// 存储稀疏矩阵到三元组顺序表storeSparseMatrix(sparseMatrix, &sm, 5, 5);// 恢复稀疏矩阵int restoredSparseMatrix[5][5];restoreSparseMatrix(restoredSparseMatrix, sm, 5, 5);// 打印恢复后的稀疏矩阵,验证正确性for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {printf("%d ", restoredSparseMatrix[i][j]);}printf("\n");}return 0;
}

通过对多维数组和各种特殊矩阵的存储与压缩方式的深入理解和掌握,能够在处理大规模数据矩阵相关的问题时,有效地减少存储空间的占用并提高数据处理的效率。在实际应用中,例如在图像处理、科学计算(如有限元分析中的矩阵运算)、数据挖掘等领域,这些技术都有着广泛的应用前景。
在图像处理中,图像可以看作是一个二维矩阵,当处理一些具有特定对称性或稀疏性的图像数据时,利用相应的矩阵存储和压缩技术,可以减少内存的占用,加快图像的处理速度,如对一些纹理具有对称性的图像进行压缩存储以便后续的传输或分析。
在科学计算里,很多物理问题的数学模型最终会转化为大规模的矩阵运算。例如在结构力学的有限元分析中,得到的刚度矩阵往往是对称矩阵或稀疏矩阵,采用合适的存储方式能够显著降低存储需求,提高计算效率,使得在有限的计算机资源下能够处理更复杂的结构模型。
在数据挖掘领域,一些关联矩阵或相似度矩阵可能具有稀疏性的特点,运用稀疏矩阵的存储和处理方法,可以高效地挖掘数据之间的潜在关系,发现有价值的信息模式,如在社交网络分析中处理用户之间的关联矩阵,挖掘用户群体的特征和行为模式。

相关文章:

多维数组与特殊矩阵:存储与压缩

多维数组与特殊矩阵&#xff1a;存储与压缩 一、多维数组的存储 &#xff08;一&#xff09;基本概念 多维数组是线性表的推广&#xff0c;例如二维数组可以看作是元素为一维数组的线性表&#xff0c;三维数组可以看作是元素为二维数组的线性表&#xff0c;以此类推。在内存…...

第三讲 架构详解:“隐语”可信隐私计算开源框架

目录 隐语架构 隐语架构拆解 产品层 算法层 计算层 资源层 互联互通 跨域管控 本文主要是记录参加隐语开源社区推出的第四期隐私计算实训营学习到的相关内容。 隐语架构 隐语架构拆解 产品层 产品定位&#xff1a; 通过可视化产品&#xff0c;降低终端用户的体验和演…...

springboot项目使用maven打包,第三方jar问题

springboot项目使用maven package打包为可执行jar后&#xff0c;第三方jar会被打包进去吗&#xff1f; 答案是肯定的。做了实验如下&#xff1a; 第三方jar的项目结构及jar包结构如下&#xff1a;&#xff08;该第三方jar采用的是maven工程&#xff0c;打包为普通jar&#xf…...

突破内存限制:Mac Mini M2 服务器化实践指南

本篇文章&#xff0c;我们聊聊如何使用 Mac Mini M2 来实现比上篇文章性价比更高的内存服务器使用&#xff0c;分享背后的一些小的思考。 希望对有类似需求的你有帮助。 写在前面 在上文《ThinkPad Redis&#xff1a;构建亿级数据毫秒级查询的平民方案》中&#xff0c;我们…...

【Linux】Linux系统电源状态

前言 本文主要介绍Linux系统电源状态。 Linux内核代码声明如下&#xff0c;位于kernel/power/suspend.c。 参考链接 Linux系统电源状态 在Linux操作系统中&#xff0c;将电源划分为如下几个状态&#xff1a; ACPI StateLinux StateDescriptionS0On(on)WorkingS1Standby(sta…...

《用Python画蔡徐坤:艺术与编程的结合》

简介 大家好&#xff01;今天带来一篇有趣的Python编程项目&#xff0c;用代码画出知名偶像蔡徐坤的形象。这个项目使用了Python的turtle库&#xff0c;通过简单的几何图形和精心设计的代码来展示艺术与编程的结合。 以下是完整的代码和效果介绍&#xff0c;快来试试看吧&…...

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China&#xff0c;2018年4月established&#xff0c;独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1&#xff08;星辰处理器&#xff09; STAT-MC1&#xff0c;主要为满足AIOT应用性能、功…...

硬中断关闭后的堆栈抓取方法

一、背景 性能和稳定性是一个计算机工程里的一个永恒的主题。其中尤其稳定性这块的问题发现和问题分析及问题解决就依赖合适的对系统的观测的手段&#xff0c;帮助我们发现问题&#xff0c;识别问题原因最后才能解决问题。稳定性问题里尤其底层问题里&#xff0c;除了panic问题…...

电影风格城市夜景旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 电影风格城市夜景旅拍通过 Lightroom 调色&#xff0c;将城市夜晚的景色打造出如同电影画面般的质感和氛围。以独特的色彩和光影处理&#xff0c;展现出城市夜景的魅力与神秘。 预设信息 调色风格&#xff1a;电影风格预设适合类型&#xff1a;人像&#xff0c;街拍…...

基于FPGA的2FSK调制-串口收发-带tb仿真文件-实际上板验证成功

基于FPGA的2FSK调制 前言一、2FSK储备知识二、代码分析1.模块分析2.波形分析 总结 前言 设计实现连续相位 2FSK 调制器&#xff0c;2FSK 的两个频率为:fI15KHz&#xff0c;f23KHz&#xff0c;波特率为 1500 bps,比特0映射为f 载波&#xff0c;比特1映射为 载波。 1&#xff09…...

【Python】构建事件驱动架构:用Python实现实时应用的高效系统

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 事件驱动架构(Event-Driven Architecture,EDA)是一种基于事件流动进行系统设计的模式,广泛应用于游戏开发、实时监控和分布式系统中。它通过解耦事件的生产者和消费者,提升系统的可扩展性和灵活性。本文章从…...

安装 Docker(使用国内源)

一、安装Docker-ce 1、下载阿里云的repo源 [rootlocalhost ~]# yum install yum-utils -y && yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum makecache # 尝试列出 docker-ce 的版本 [rootlocalh…...

001 MATLAB介绍

前言&#xff1a; 软件获取渠道有很多&#xff0c;难点也就是百度网盘下载慢&#xff1b; 线上版本每月有时间限制。 01 MATLAB介绍 性质&#xff1a; MATLAB即Matrix Laboratory 矩阵实验室的意思&#xff0c;是功能强大的计算机高级语言, 已广泛应用于各学科研究部门、…...

vscode利用ofExtensions插件可以调试单进程Openfoam,但是不能调试mpi多进程案例

问题&#xff1a; 准备调试流固耦合案例&#xff0c;包括流体和固体的&#xff0c;但是用ofextensions插件。但是流体的话使用的是域分解方法&#xff0c;将大的单元分成了小的单元用mpi并行处理&#xff0c;里面的program必须输入"/usr/bin/mpirun", // 这里改为使…...

2022年计算机网络408考研真题解析

第一题&#xff1a; 解析&#xff1a;网络体系结构-数据链路层 在ISO网络参考模型中&#xff0c;运输层&#xff0c;网络层和数据链路层都实现了流量的控制功能&#xff0c;其中运输层实现的是端到端的流量控制&#xff0c;网络层实现的是整个网络的流量控制&#xff0c;数据链…...

React-useEffect的使用

useEffect react提供的一个常用hook&#xff0c;用于在函数组件中执行副作用操作&#xff0c;比如数据获取、订阅或手动更改DOM。 基本用法&#xff1a; 接受2个参数&#xff1a; 一个包含命令式代码的函数&#xff08;副作用函数&#xff09;。一个依赖项数组&#xff0c;用…...

python学习笔记(10)算法(3)列表

一、列表 列表&#xff08;list&#xff09;是一个抽象的数据结构概念&#xff0c;它表示元素的有序集合&#xff0c;支持元素访问、修改、添加、删除和遍历 等操作&#xff0c;无须使用者考虑容量限制的问题。列表可以基于链表或数组实现。 ‧ 链表天然可以看作一个列表&#…...

嵌入式系统与单片机工作原理详解

随着现代科技的发展&#xff0c;嵌入式系统已经深入到我们日常生活中的方方面面。无论是智能家居、汽车电子&#xff0c;还是工业控制、医疗设备&#xff0c;都离不开嵌入式系统的支持。而单片机作为嵌入式系统的核心组件&#xff0c;是实现这些功能的关键之一。本文将详细介绍…...

Spark SQL 之 QueryStage

ExchangeQueryStageExec ExchangeQueryStageExec 分为两种...

Flink Standalone 集群模式安装部署教程

目录 一、前言 二、环境准备 三、安装步骤 1. 下载并安装 Flink 4. 配置 Flink 5. 配置环境变量 6. 启动 Flink 集群 7. 访问 Flink Web 界面 四、简单测试 五、常见问题和解决办法 1. 启动失败&#xff0c;无法连接到 TaskManager 2. Web 界面无法访问 六、总结 …...

【运维】 使用 shell 脚本实现类似 jumpserver 效果实现远程登录linux 服务器

实现效果 通过序号选择登录&#xff1a; 配置证书登录 配置证书登录可以免去每次都输入密码的麻烦。详见另一篇博文&#xff1a; 【ssh】使用秘钥对&#xff08;公钥/私钥&#xff09;登录linux主机以及原理介绍 自动登录脚本 直接复用以下脚本即可&#xff0c;在 server…...

根据实验试要求,打通隧道连接服务器上的数据库,前端进行数据调用。

1.背景介绍 数据库布置在了工大实验试K80服务器上&#xff0c;本地属于外网无法直接访问校园内网。需要打通隧道&#xff0c;通过堡垒机进行服务器的访问。获取到数据库数据进行前端展示。 2.打通隧道 访问指令&#xff1a; 我选择使用Xshell打通隧道。优点&#xff1a;凭证…...

ubuntu 安装 docker 记录

本文假设系统为 Ubuntu&#xff0c;从 16.04 到 24.04&#xff0c;且通过 APT 命令安装。理论上也其他 Debian 系的操作系统。 WSL 也一样。 感觉 Docker 官方在强推 Docker Desktop&#xff0c;搜索 Docker 安装文档&#xff0c;一不小心就被导航到了 Docker Desktop 的安装页…...

46.坑王驾到第十期:vscode 无法使用 tsc 命令

点赞收藏加关注&#xff0c;你也能住大别墅&#xff01; 一、问题重现 上一篇帖子记录了我昨天在mac上安装typescript及调试的过程。今天打开vscode准备开干的时候&#xff0c;发现tsc命令又无法使用了&#xff0c;然后按照昨天的方法重新安装调试后又能用了&#xff0c;但是关…...

pytorch3d linux安装

目录 测试成功2024.11.21&#xff1a; 测试成功2024.11.21&#xff1a; python3.10 GitHub - facebookresearch/pytorch3d: PyTorch3D is FAIRs library of reusable components for deep learning with 3D data 安装脚本&#xff1a; cd pytorch3d && pip install…...

P1168 中位数

网址如下&#xff1a;P1168 中位数 - 洛谷 | 计算机科学教育新生态 一道求中位数的题&#xff0c;本来是想再用二分法来试一下的&#xff0c;但是出现了一点问题&#xff0c;先把AC的放出来 很简单&#xff0c;一个记录比中位数大的数的最小堆&#xff0c;和一个记录比中位数小…...

全面解析多种mfc140u.dll丢失的解决方法,五种方法详细解决

当你满心期待地打开某个常用软件&#xff0c;却突然弹出一个错误框&#xff0c;提示“mfc140u.dll丢失”&#xff0c;那一刻&#xff0c;你的好心情可能瞬间消失。这种情况在很多电脑用户的使用过程中都可能出现。无论是游戏玩家还是办公族&#xff0c;面对这个问题都可能不知所…...

✅✅✅【Vue.js】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本

api.js //封装ajax方法 import $g from "../sg";//vue项目使用 import $ from jquery;//(提示&#xff1a;原生开发页面请前往https://jquery.com下载最新版jQuery) import { Message } from "element-ui";//element项目使用 // import axios from "…...

【Python】分割秘籍!掌握split()方法,让你的字符串处理轻松无敌!

在Python开发中&#xff0c;字符串处理是最常见也是最基础的任务之一。而在众多字符串操作方法中&#xff0c;split()函数无疑是最为重要和常用的一个。无论你是Python新手&#xff0c;还是经验丰富的开发者&#xff0c;深入理解并熟练运用split()方法&#xff0c;都将大大提升…...

非root用户安装CUDA

1.使用nvidia-smi查看当前驱动支持的最高CUDA版本&#xff1a; 表示当前驱动最多支持cuda12.1 2.进入cuda安装界面&#xff0c;https://developer.nvidia.com/cuda-toolkit-archive&#xff0c;选择想要安装的版本&#xff0c;例如想要安装CUDA11.4&#xff1a; 如果需要查看ub…...

Qt中2D绘制系统

目录 一、Qt绘制系统 1.1Qt绘制基本概念 1.2 绘制代码举例 1.3画家 1.3.1 QPainter的工作原理&#xff1a; 1.3.2 自定义绘制饼状图&#xff1a; 1.4画笔和画刷 1.4.1画笔 1.4.2 画刷填充样式 1.5 反走样和渐变 1.6绘制设备 1.7坐标变换 1.8QPainterPath 1.9绘制文…...

实战项目负载均衡式在线 OJ

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能自己实现负载均衡式在线 OJ。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1…...

shell脚本启动springboot项目

nohup java -jar springboot.jar > springboot.log 2>&1 & 表示日志输出重定向到springboot.log日志文件, 而原本的日志继续输出到 项目同级的log文件夹下, 所以这个重定向没必要. 我们没必要要2分日志 #!/bin/bash# 获取springboot项目的进程ID PID$(ps -e…...

Django 自定义路由转换器

步骤 创建自定义转换器类 必须定义 regex 属性&#xff08;用于匹配参数&#xff09;。必须实现 to_python 和 to_url 方法。 to_python: 将匹配的参数转换为视图函数可用的 Python 数据。to_url: 将数据转换为 URL 格式&#xff08;用于反向解析&#xff09;。 注册转换器 使用…...

低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试

本节目录 一、设计思路 二、loop环回模块 三、仿真模块 四、仿真验证 五、上板验证 六、往期文章链接本节内容 一、设计思路 串口数据的收发回环测试&#xff0c;最简单的硬件测试是把Tx和Rx连接在一起&#xff0c;然后上位机进行发送和接收测试&#xff0c;但是需要考虑到串…...

Oracle 数据库 IDENTITY 列

IDENTITY列是Oracle数据库12c推出的新特性。之所以叫IDENTITY列&#xff0c;是由于其支持ANSI SQL 关键字 IDENTITY&#xff0c;其内部实现还是使用SEQUENCE。 不过推出这个新语法也是应该的&#xff0c;毕竟MyQL已经有 AUTO_INCREMENT列&#xff0c;而SQL Server也已经有IDENT…...

算法笔记:单调队列

单调队列&#xff1a; 队列元素之间的关系具有单调性&#xff08;从队首到队尾单调递增/递减&#xff09;&#xff0c;队首和队尾都可以进行入队出队&#xff08;即插入删除&#xff09;操作&#xff0c;本质是由双端队列deque实现。 适用问题 通常解决动态小区间中寻找极值…...

深度解析:Nginx模块架构与工作机制的奥秘

文章目录 前言Nginx是什么?Ngnix特点&#xff1a; 一、Nginx模块与工作原理1.Nginx的模块1.1 Nginx模块常规的HTTP请求和响应的流程图:1.2 Nginx的模块从结构上分为如下三类&#xff1a;1.3 Nginx的模块从功能上分为如下三类: 2.Nginx的进程模型2.1 Nginx进程结构2.2 nginx进程…...

【git】commit之后,想撤销commit

一、已经commit&#xff0c;想要回退到上一步 保留代码 git reset --soft HEAD^回退到具体的哪一步 HEAD^的意思是上一个版本&#xff0c;也可以写成HEAD~1如果你进行了2次commit&#xff0c;想都撤回&#xff0c;可以使用HEAD~2二、git reflog 查看 sha值 git reflog 回到…...

实现在两台宿主机下的docker container 中实现多机器通讯

基于我的实验背景 上位机&#xff1a;ubuntu 20.04 (docker humble 22.04) 下位机&#xff1a;ubuntu 22.04&#xff08;docker noetic 20.04&#xff09; 目标&#xff1a;实现在上位机中的docker container 容器的22.04环境去成功远程访问 非同网段的下位机的20.04的contai…...

Python 网络爬虫操作指南

网络爬虫是自动化获取互联网上信息的一种工具。它广泛应用于数据采集、分析以及实现信息聚合等众多领域。本文将为你提供一个完整的Python网络爬虫操作指南&#xff0c;帮助你从零开始学习并实现简单的网络爬虫。我们将涵盖基本的爬虫概念、Python环境配置、常用库介绍。 上传…...

vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数

vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数 微信公众平台添加配置 微信公众平台 > 开发管理 > 开发设置 > 扫普通链接二维码打开小程序 配置链接规则需要下载校验文档给后端存入服务器中&#xff0c;保存配置的时候会校验一次&#xff0c;确定当前的配…...

高标准农田智慧农业系统建设方案

1 项目概述 1.1 建设背景 我国是农业大国,近30年来农田高产量主要依靠农药化肥的大量投入,大部分化肥和水资源没有被有效利用而随地弃置,导致大量养分损失并造成环境污染。我国农业生产仍然以传统生产模式为主,传统耕种只能凭经验施肥灌溉,不仅浪费大量的人力物力,也对环…...

【python图解】数据结构之字典和集合

【python图解】数据结构之字典和集合 在 Python 中&#xff0c;字典和集合是另外的两种重要数据结构&#xff0c;它们分别用于存储键值对和无序的唯一元素集合。下面我们将详细介绍字典和集合的定义、操作方法、使用场景及相关案例。 1. 字典&#xff08;Dictionary&#xff0…...

vue 预览pdf 【@sunsetglow/vue-pdf-viewer】开箱即用,无需开发

sunsetglow/vue-pdf-viewer 开箱即用的pdf插件sunsetglow/vue-pdf-viewer, vue3 版本 无需多余开发&#xff0c;操作简单&#xff0c;支持大文件 pdf 滚动加载&#xff0c;缩放&#xff0c;左侧导航&#xff0c;下载&#xff0c;页码&#xff0c;打印&#xff0c;文本复制&…...

TCL嵌入式面试题及参考答案

USB2.0 和 USB3.0 的速度区别是什么? USB2.0 和 USB3.0 在速度上有显著的区别。USB2.0 理论上的最高传输速度为 480Mbps,也就是 60MB/s 左右。而 USB3.0 的理论传输速度则可达到 5Gbps,即约 625MB/s ,这比 USB2.0 快了很多倍。 在实际应用中,USB2.0 通常用于一些对速度要求…...

即时通讯服务器被ddos攻击了怎么办?

攻击即时通讯系统的主要手段 击键记录 目前盗取即时通讯工具帐号信息的最主要方法是通过特洛伊木马等恶意软件&#xff0c;例如QQ木马&#xff0c;这类程序能够盗取QQ密码信息&#xff0c;常见的能够盗取最新版本QQ密码的木马程序有十几种之多。几乎所有主要的QQ木马程序都采…...

RTC QoS方法十三.(ReedSolomonFEC简介)

一、FlexFEC恢复的困局 在使用FlexFEC进行冗余的时候&#xff0c;经验值需要冗余5倍的丢包率&#xff0c;才能有比较高的恢复率。 Flex FEC在2D数组异或时能获得比较高的恢复率&#xff0c;但是如上图所示&#xff0c;25个包发送10个FEC包&#xff0c;成本为10/2540%的冗余度。…...

嵌入式开发工程师面试题 - 2024/11/24

原文嵌入式开发工程师面试题 - 2024/11/24 转载请注明来源 1.若有以下定义语句double a[8]&#xff0c;*pa&#xff1b;int i5&#xff1b;对数组元素错误的引用是&#xff1f; A *a B a[5] C *&#xff08;p1&#xff09; D p[8] 解析&#xff1a; 在 C 或 C 语言中&am…...

《Shader入门精要》透明效果

代码以及实例图可以看github &#xff1a;zaizai77/Shader-Learn: 实现一些书里讲到的shader 在实时渲染中要实现透明效果&#xff0c;通常会在渲染模型时控制它的透明通道&#xff08;Alpha Channel&#xff09;​。当开启透明混合后&#xff0c;当一个物体被渲染到屏幕上时&…...