矩阵运算的复杂度分析(Complexity Analysis of Matrix Operations):中英双语
矩阵运算的复杂度分析
矩阵运算在科学计算、机器学习、图像处理等领域中起着至关重要的作用。了解各种常见矩阵运算的复杂度,对于优化算法、提高计算效率具有重要意义。在这篇博客中,我们将详细探讨矩阵加法、标量乘法、矩阵转置、矩阵-向量乘法等基本矩阵运算的计算复杂度,并通过实际例子来帮助理解。
1. 矩阵加法与标量乘法的复杂度
1.1 矩阵加法
矩阵加法是将两个矩阵对应位置的元素相加,生成一个新的矩阵。假设我们有两个形状为 ( m × n m \times n m×n ) 的矩阵 ( A A A ) 和 ( B B B ),其加法操作可以表示为:
C = A + B C = A + B C=A+B
对于每个元素 ( C i j C_{ij} Cij ),我们需要进行一次加法操作,总共需要进行 ( m × n m \times n m×n ) 次加法。因此,矩阵加法的复杂度为 ( O ( m n ) O(mn) O(mn) ) 次浮点运算(flops)。
稀疏矩阵加法
当矩阵 ( A A A ) 和 ( B B B ) 是稀疏矩阵时,其中许多元素为零。假设矩阵 ( A A A ) 和 ( B B B ) 的非零元素分别为 ( nnz ( A ) \text{nnz}(A) nnz(A) ) 和 ( nnz ( B ) \text{nnz}(B) nnz(B) ),那么加法操作的复杂度为:
O ( min ( nnz ( A ) , nnz ( B ) ) ) O(\min(\text{nnz}(A), \text{nnz}(B))) O(min(nnz(A),nnz(B)))
这是因为对于每一对 ( A i j A_{ij} Aij ) 和 ( B i j B_{ij} Bij ),只有当它们中非零元素重叠时,才需要进行加法运算。这样,计算加法所需的操作数大大减少,尤其是在稀疏矩阵的情况下。请参考文末的解释
示例
假设矩阵 ( A A A ) 和 ( B B B ) 均为 ( 4 × 4 4 \times 4 4×4 ) 的稀疏矩阵,并且它们的非零元素分别为 ( nnz ( A ) = 5 \text{nnz}(A) = 5 nnz(A)=5 ) 和 ( nnz ( B ) = 3 \text{nnz}(B) = 3 nnz(B)=3 )。那么,矩阵加法的复杂度是:
O ( min ( 5 , 3 ) ) = O ( 3 ) O(\min(5, 3)) = O(3) O(min(5,3))=O(3)
这比一般的矩阵加法复杂度 ( O ( 16 ) O(16) O(16) ) 要低得多。
1.2 标量乘法
标量乘法是将矩阵的每个元素都乘以一个常数标量。对于一个 ( m × n m \times n m×n ) 矩阵 ( A A A ) 和标量 ( α \alpha α ),标量乘法 ( C = α A C = \alpha A C=αA ) 需要对每个矩阵元素 ( A i j A_{ij} Aij ) 进行一次乘法操作,共 ( m × n m \times n m×n ) 次浮点运算。因此,标量乘法的复杂度也是 ( O ( m n ) O(mn) O(mn) )。
稀疏矩阵的标量乘法
对于稀疏矩阵,标量乘法所需的运算次数与非零元素的数量 ( nnz ( A ) \text{nnz}(A) nnz(A) ) 成正比。因此,稀疏矩阵的标量乘法复杂度为 ( O ( nnz ( A ) ) O(\text{nnz}(A)) O(nnz(A)) )。
2. 矩阵转置的复杂度
矩阵转置操作是将矩阵的行和列互换。例如,对于一个 ( m × n m \times n m×n ) 矩阵 ( A A A ),其转置矩阵 ( A T A^T AT ) 是一个 ( n × m n \times m n×m ) 的矩阵,满足 ( A i j T = A j i A^T_{ij} = A_{ji} AijT=Aji )。
转置操作的复杂度是 ( O ( 1 ) O(1) O(1) ),即不需要进行实际的计算。因为矩阵转置只需要将矩阵中的元素重新排列,并不涉及任何数值计算(如加法或乘法),因此转置操作的浮点运算数为零。
然而,需要注意的是,矩阵元素的重新排列是有时间消耗的,但这不计算在“浮点操作数”内。
3. 矩阵-向量乘法的复杂度
矩阵-向量乘法是矩阵运算中常见的基本操作之一。假设矩阵 ( A A A ) 是一个 ( m × n m \times n m×n ) 的矩阵,向量 ( x x x ) 是一个长度为 ( n n n ) 的向量,矩阵-向量乘法的结果 ( y = A × x y = A \times x y=A×x ) 是一个长度为 ( m m m ) 的向量。
对于每个输出元素 ( y i y_i yi ),我们需要计算 ( A i ⋅ x A_i \cdot x Ai⋅x ) 的内积,即矩阵 ( A A A ) 的第 ( i i i ) 行与向量 ( x x x ) 的内积。每次内积计算都需要 ( n n n ) 次乘法和 ( n − 1 n-1 n−1 ) 次加法。因此,对于每个输出元素 ( y i y_i yi ),计算复杂度为 ( O ( n ) O(n) O(n) )。
由于有 ( m m m ) 个输出元素,总的计算复杂度为 ( O ( m n ) O(mn) O(mn) )。
稀疏矩阵的矩阵-向量乘法
当矩阵 ( A A A ) 是稀疏矩阵时,复杂度将大大降低。假设矩阵 ( A A A ) 的非零元素数量为 ( nnz ( A ) \text{nnz}(A) nnz(A) ),那么矩阵-向量乘法的复杂度为:
O ( nnz ( A ) ) O(\text{nnz}(A)) O(nnz(A))
这表示我们只需要对非零元素进行乘法和加法操作,而跳过零元素,从而大大减少了计算量。
示例
假设矩阵 ( A A A ) 是一个 ( 4 × 4 4 \times 4 4×4 ) 的稀疏矩阵,非零元素有 4 个,而向量 ( x x x ) 是一个长度为 4 的向量。矩阵-向量乘法的复杂度为:
O ( nnz ( A ) ) = O ( 4 ) O(\text{nnz}(A)) = O(4) O(nnz(A))=O(4)
这比一般的矩阵-向量乘法 ( O ( 16 ) O(16) O(16) ) 要高效得多。
4. 复杂度总结
下表总结了矩阵运算的计算复杂度:
操作 | 复杂度 | 备注 |
---|---|---|
矩阵加法 | ( O ( m n ) O(mn) O(mn) ) | 非零元素的加法数 |
稀疏矩阵加法 | ( O ( min ( nnz ( A ) , nnz ( B ) ) ) O(\min(\text{nnz}(A), \text{nnz}(B))) O(min(nnz(A),nnz(B))) ) | 非零元素的加法数 |
标量乘法 | ( O ( m n ) O(mn) O(mn) ) | 矩阵每个元素乘以标量 |
稀疏矩阵标量乘法 | ( O ( nnz ( A ) ) O(\text{nnz}(A)) O(nnz(A)) ) | 仅乘以非零元素 |
矩阵转置 | ( O ( 1 ) O(1) O(1) ) | 仅重新排列元素 |
矩阵-向量乘法 | ( O ( m n ) O(mn) O(mn) ) | 计算每个输出的内积 |
稀疏矩阵-向量乘法 | ( O ( nnz ( A ) ) O(\text{nnz}(A)) O(nnz(A)) ) | 仅计算非零元素 |
5. 小结
了解矩阵运算的复杂度对于高效的算法设计至关重要。在处理稀疏矩阵时,了解如何利用矩阵的稀疏性来降低计算量是非常有价值的。通过对加法、标量乘法、矩阵-向量乘法等操作的分析,我们可以更好地优化计算过程,尤其是在大规模数据处理和高性能计算领域。
希望通过这篇博客,你能对矩阵运算的复杂度有一个更清晰的理解,并在实际工作中应用这些理论来优化算法性能。
补充
稀疏矩阵加法的实际情况
假设矩阵 ( A A A ) 和 ( B B B ) 分别有 5 个和 3 个非零元素,并且这些非零元素的位置完全不重叠。那么我们需要进行加法的操作只发生在 ( A A A ) 和 ( B B B ) 对应位置上的非零元素重合的地方。
1. 非零元素的位置不重叠:
当 ( A A A ) 和 ( B B B ) 的非零元素位置完全不重叠时,我们不会有任何加法运算发生。原因如下:
- 对于矩阵 ( A A A ) 中的每个非零元素 ( A i j A_{ij} Aij ),如果 ( B i j = 0 B_{ij} = 0 Bij=0),那么 ( C i j = A i j C_{ij} = A_{ij} Cij=Aij ),我们只需将 ( A i j A_{ij} Aij ) 复制到结果矩阵 ( C C C ) 中,不需要加法操作。
- 对于矩阵 ( B B B ) 中的每个非零元素 ( B i j B_{ij} Bij ),如果 ( A i j = 0 A_{ij} = 0 Aij=0 ),那么 ( C i j = B i j C_{ij} = B_{ij} Cij=Bij ),我们只需将 ( B i j B_{ij} Bij ) 复制到结果矩阵 ( C C C ) 中,不需要加法操作。
由于矩阵 ( A A A ) 和 ( B B B ) 中的非零元素位置完全不重叠,每个非零元素只是简单地复制到结果矩阵中,所以 根本没有加法运算。
2. 如果有重叠:
如果矩阵 ( A A A ) 和 ( B B B ) 中的非零元素有重叠,即它们有相同的 ( ( i , j ) (i, j) (i,j) ) 位置,并且 ( A i j ≠ 0 A_{ij} \neq 0 Aij=0 ) 且 ( B i j ≠ 0 B_{ij} \neq 0 Bij=0 ),那么在该位置,我们确实需要执行一次加法操作:
- 对于重叠的非零元素,我们计算 ( C i j = A i j + B i j C_{ij} = A_{ij} + B_{ij} Cij=Aij+Bij )。
结论
所以,最坏情况下的加法操作次数并不是 ( 3 + 5 = 8 3 + 5 = 8 3+5=8 ),而是 ( min ( nnz ( A ) , nnz ( B ) \min(\text{nnz}(A), \text{nnz}(B) min(nnz(A),nnz(B)) ),因为只有重叠位置才会进行加法运算,而非重叠位置仅仅是复制操作,不需要加法。
Complexity Analysis of Matrix Operations
Matrix operations play a crucial role in scientific computing, machine learning, image processing, and other fields. Understanding the complexities of common matrix operations is essential for optimizing algorithms and improving computational efficiency. In this blog, we will explore the computational complexities of basic matrix operations such as matrix addition, scalar multiplication, matrix transposition, and matrix-vector multiplication, with practical examples to help understand them.
1. Complexity of Matrix Addition and Scalar Multiplication
1.1 Matrix Addition
Matrix addition involves adding the corresponding elements of two matrices to generate a new matrix. Suppose we have two matrices ( A A A ) and ( B B B ) of shape ( m × n m \times n m×n ). The addition operation can be represented as:
C = A + B C = A + B C=A+B
For each element ( C i j C_{ij} Cij ), we need to perform one addition operation. Thus, the total number of additions required is ( m × n m \times n m×n ), making the time complexity of matrix addition ( O ( m n ) O(mn) O(mn) ) floating-point operations (flops).
Sparse Matrix Addition
When matrices ( A A A ) and ( B B B ) are sparse, many elements are zero. Suppose matrix ( A A A ) has ( nnz ( A ) \text{nnz}(A) nnz(A) ) non-zero elements and matrix ( B B B ) has ( nnz ( B ) \text{nnz}(B) nnz(B) ) non-zero elements. The complexity of the addition operation in this case is:
O ( min ( nnz ( A ) , nnz ( B ) ) ) O(\min(\text{nnz}(A), \text{nnz}(B))) O(min(nnz(A),nnz(B)))
This is because for each pair of elements ( A i j A_{ij} Aij ) and ( B i j B_{ij} Bij ), the addition operation is only required if at least one of them is non-zero. Therefore, the number of operations needed for addition is significantly reduced, especially for sparse matrices.
Example
Suppose matrices ( A A A ) and ( B B B ) are both sparse ( 4 × 4 4 \times 4 4×4 ) matrices, with ( nnz ( A ) = 5 \text{nnz}(A) = 5 nnz(A)=5 ) and ( nnz ( B ) = 3 \text{nnz}(B) = 3 nnz(B)=3 ). The complexity of the matrix addition is:
O ( min ( 5 , 3 ) ) = O ( 3 ) O(\min(5, 3)) = O(3) O(min(5,3))=O(3)
This is much lower than the general matrix addition complexity ( O ( 16 ) O(16) O(16) ).
1.2 Scalar Multiplication
Scalar multiplication involves multiplying each element of the matrix by a constant scalar. For an ( m × n m \times n m×n ) matrix ( A A A ) and a scalar ( α \alpha α ), scalar multiplication ( C = α A C = \alpha A C=αA ) requires one multiplication operation for each element of the matrix, totaling ( m × n m \times n m×n ) floating-point operations. Therefore, the complexity of scalar multiplication is also ( O ( m n ) O(mn) O(mn) ).
Sparse Matrix Scalar Multiplication
For sparse matrices, the number of operations required for scalar multiplication is proportional to the number of non-zero elements ( nnz ( A ) \text{nnz}(A) nnz(A) ). Hence, the complexity for sparse matrix scalar multiplication is:
O ( nnz ( A ) ) O(\text{nnz}(A)) O(nnz(A))
2. Complexity of Matrix Transposition
Matrix transposition involves swapping the rows and columns of a matrix. For an ( m × n m \times n m×n ) matrix ( A A A ), its transpose ( A T A^T AT ) is an ( n × m n \times m n×m ) matrix, satisfying ( A i j T = A j i A^T_{ij} = A_{ji} AijT=Aji ).
The complexity of the transposition operation is ( O ( 1 ) O(1) O(1) ), meaning no actual computation is needed. Matrix transposition only involves rearranging the elements of the matrix, which doesn’t require arithmetic operations (such as addition or multiplication), so the floating-point operation count is zero.
However, it is important to note that the reorganization of matrix elements does incur time costs, but these are not counted as “floating-point operations.”
3. Complexity of Matrix-Vector Multiplication
Matrix-vector multiplication is one of the most common matrix operations. Suppose matrix ( A A A ) is an ( m × n m \times n m×n ) matrix, and vector ( x x x ) is of length ( n n n ). The result of the matrix-vector multiplication ( y = A × x y = A \times x y=A×x ) is a vector of length ( m m m ).
For each output element ( y i y_i yi ), we need to compute the inner product ( A i ⋅ x A_i \cdot x Ai⋅x ), i.e., the inner product of the ( i i i )-th row of matrix ( A A A ) with vector ( x x x ). Each inner product computation requires ( n n n ) multiplications and ( n − 1 n-1 n−1 ) additions. Thus, for each output element ( y i y_i yi ), the computational complexity is ( O ( n ) O(n) O(n) ).
Since there are ( m m m ) output elements, the total complexity is ( O ( m n ) O(mn) O(mn) ).
Sparse Matrix-Vector Multiplication
When matrix ( A A A ) is sparse, the complexity reduces significantly. Suppose matrix ( A A A ) has ( nnz ( A ) \text{nnz}(A) nnz(A) ) non-zero elements, then the complexity of matrix-vector multiplication is:
O ( nnz ( A ) ) O(\text{nnz}(A)) O(nnz(A))
This means we only need to perform multiplication and addition for the non-zero elements, skipping the zero elements, which greatly reduces the computation.
Example
Suppose matrix ( A A A ) is a ( 4 × 4 4 \times 4 4×4 ) sparse matrix with 4 non-zero elements, and vector ( x x x ) is a vector of length 4. The complexity of the matrix-vector multiplication is:
O ( nnz ( A ) ) = O ( 4 ) O(\text{nnz}(A)) = O(4) O(nnz(A))=O(4)
This is much more efficient than the general matrix-vector multiplication complexity ( O ( 16 ) O(16) O(16) ).
4. Complexity Summary
The table below summarizes the computational complexities of matrix operations:
Operation | Complexity | Remarks |
---|---|---|
Matrix Addition | ( O ( m n ) O(mn) O(mn) ) | Additions for all elements |
Sparse Matrix Addition | ( O ( min ( nnz ( A ) , nnz ( B ) ) ) O(\min(\text{nnz}(A), \text{nnz}(B))) O(min(nnz(A),nnz(B))) ) | Additions for non-zero elements |
Scalar Multiplication | ($ O(mn)$ ) | Multiplying each element by a scalar |
Sparse Matrix Scalar Multiplication | ( O ( nnz ( A ) ) O(\text{nnz}(A)) O(nnz(A)) ) | Multiply only non-zero elements |
Matrix Transposition | ( O ( 1 ) O(1) O(1) ) | Only rearrange elements |
Matrix-Vector Multiplication | ( O ( m n ) O(mn) O(mn) ) | Compute the inner product for each output element |
Sparse Matrix-Vector Multiplication | ( O ( nnz ( A ) ) O(\text{nnz}(A)) O(nnz(A)) ) | Compute only for non-zero elements |
5. Conclusion
Understanding the complexity of matrix operations is crucial for efficient algorithm design. When working with sparse matrices, knowing how to leverage their sparsity to reduce computation is extremely valuable. By analyzing operations like addition, scalar multiplication, and matrix-vector multiplication, we can better optimize computational processes, especially in large-scale data processing and high-performance computing.
We hope this blog gives you a clearer understanding of matrix operation complexities and helps you apply these theories to optimize algorithm performance in real-world tasks.
后记
2024年12月20日15点56分于上海, 在GPT4o大模型辅助下完成。
相关文章:
矩阵运算的复杂度分析(Complexity Analysis of Matrix Operations):中英双语
矩阵运算的复杂度分析 矩阵运算在科学计算、机器学习、图像处理等领域中起着至关重要的作用。了解各种常见矩阵运算的复杂度,对于优化算法、提高计算效率具有重要意义。在这篇博客中,我们将详细探讨矩阵加法、标量乘法、矩阵转置、矩阵-向量乘法等基本矩…...
第二十四天 循环神经网络(RNN)LSTM与GRU
LSTM(长短期记忆网络)和GRU(门控循环单元)是两种流行的循环神经网络变体,它们被设计来解决传统RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。这两种网络都通过引入门控机制来控制信息的流动,从而能…...
RTC实时时钟
BKP(备份寄存器) 1. 什么是BKP? 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电 源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒ÿ…...
移动网络(2,3,4,5G)设备TCP通讯调试方法
背景: 当设备是移动网络设备连接云平台的时候,如果服务器没有收到网络数据,移动物联设备发送不知道有没有有丢失数据的时候,需要一个抓取设备出来的数据和服务器下发的数据的方法。 1.服务器系统是很成熟的,一般是linu…...
项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%
资料查找: 01 方案选择 使用单片机测量电阻有多种方法,以下是一些常见的方法及其原理: 串联分压法(ADC) 原理:根据串联电路的分压原理,通过测量已知电阻和待测电阻上的电压,计算出…...
如何使用checkBox组件实现复选框
文章目录 概念介绍使用方法示例代码我们在上一章回中介绍了DatePickerDialog Widget相关的内容,本章回中将介绍Checkbox Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的Checkbox也是叫复选框,没有选中时是一个正方形边框,边框内容是空白的,选中时会…...
用bootstrap搭建侧边栏
要注意: 标签的id"v-pills-dataset1-tab"要和跳转内容的aria-labelledby"v-pills-dataset1-tab"一致 标签的aria-controls"v-pills-dataset1"要和跳转内容的id"v-pills-dataset1"一致 <!-- 左边的列(侧边栏…...
手眼标定工具操作文档
1.手眼标定原理介绍 术语介绍 手眼标定:为了获取相机与机器人坐标系之间得位姿转换关系,需要对相机和机器人坐标系进行标定,该标定过程成为手眼标定,用于存储这一组转换关系的文件称为手眼标定文件。 ETH:即Eye To …...
巧记斜边函数hypot
hypot是一个数学函数,源于英文"hypotenuse(斜边)",hypot(a, b)返回直角边边长为a、b的直角三角形(right-angled triangle)的斜边长度。该函数定义在<math.h>头文件中,其功能相当…...
STM32单片机芯片与内部33 ADC 单通道连续DMA
目录 一、ADC DMA配置——标准库 1、ADC配置 2、DMA配置 二、ADC DMA配置——HAL库 1、ADC配置 2、DMA配置 三、用户侧 1、DMA开关 (1)、标准库 (2)、HAL库 2、DMA乒乓 (1)、标准库 ÿ…...
【程序人生】掌握一门编程语言
掌握一门编程语言不仅仅是能够编写正确的语法,它还涉及到对语言特性、工具链、最佳实践以及解决问题的能力有深入的理解。以下是衡量你是否掌握了某门编程语言的关键指标: 语法与基本概念 语法熟悉度:能够在不查阅文档的情况下写出正确的代码…...
数据库发生了死锁怎么办
当项目中存在公共的数据表,比如日志表,同时存在对这张表的读写操作,或者是对数据量较大的表加索引同时伴随其他并发操作,那么这张表就有较高概率发生死锁。 现象:对于这张表的任何操作都会被阻塞,项目出现…...
传递函数的幅值在0到1之间
为什么所有传递函数的幅值应该在 0 到 1 之间 在声学、振动学和信号处理等领域,传递函数的幅值表示系统对输入信号的响应幅度。在许多声学实验中,传递函数的幅值反映了声波的传输或反射特性。理论上,所有传递函数的幅值应当在 0 到 1 之间&a…...
[Unity Shader]【图形渲染】 数学基础4 - 矩阵定义和矩阵运算详解
矩阵是计算机图形学中的重要数学工具,尤其在Shader编程中,它被广泛用于坐标变换、投影变换和模型动画等场景。本文将详细介绍矩阵的定义、基本运算以及如何在Shader中应用矩阵,为初学者打下坚实的数学基础。 一、什么是矩阵? 矩阵是一个由数字排列成的长方形数组,通常记作…...
蓝桥杯练习生第四天
小蓝每天都锻炼身体。 正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。 小蓝跑步已经坚持了很长时间&#x…...
Jmeter压测实战:Jmeter二次开发之自定义函数
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Jmeter是Apache基金会下的一款应用场景非常广的压力测试工具,具备轻量、高扩展性、分布式等特性。Jmeter已支持实现随机数、计数器、时间戳、大小写转换…...
梯度(Gradient)和 雅各比矩阵(Jacobian Matrix)的区别和联系:中英双语
雅各比矩阵与梯度:区别与联系 在数学与机器学习中,梯度(Gradient) 和 雅各比矩阵(Jacobian Matrix) 是两个核心概念。虽然它们都描述了函数的变化率,但应用场景和具体形式有所不同。本文将通过…...
[python SQLAlchemy数据库操作入门]-02.交易数据实体类建立
哈喽,大家好,我是木头左! 为了顺利地使用SQLAlchemy进行股票交易数据的处理,首先需要搭建一个合适的开发环境。这包括安装必要的软件包以及配置相关的依赖项。 安装Python及虚拟环境 下载并安装Python(推荐使用最新版)。创建一个新的虚拟环境以避免依赖冲突。python -m …...
python打包exe文件
由于用户需要,将采集数据解析成txt文件,为了方便使用,将python解析方法打包成exe文件供用户使用 安装环境 ./pip.exe install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simplepython导入需要的包 import tkinter as tk from tkin…...
C# opencvsharp 流程化-脚本化-(2)ROI
ROI ROI也是经常需要使用的方法。特别是在图像编辑中。ROI又称感兴趣的区域,但是图像是矩阵是矩形的,感兴趣的是乱八七糟的,所以还有一个Mask需要了解一下的。 public class RoiStep : IImageProcessingStep{public ImageProcessingStepType…...
【Python】基于Python的CI/CD工具链:实现自动化构建与发布
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代软件开发中,持续集成(CI)和持续交付(CD)已经成为提高开发效率和软件质量的重要实践。CI/CD流程帮助开发团队自动化构建、测试、…...
Flutter组件————Scaffold
Scaffold Scaffold 是一个基础的可视化界面结构组件,它实现了基本的Material Design布局结构。使用 Scaffold 可以快速地搭建起包含应用栏(AppBar)、内容区域(body)、抽屉菜单(Drawer)、底部导…...
2024年《网络安全事件应急指南》
在这个信息技术日新月异的时代,网络攻击手段的复杂性与日俱增,安全威胁层出不穷,给企事业单位的安全防护能力带 来了前所未有的挑战。深信服安全应急响应中心(以下简称“应急响应中心”)编写了《网络安全事件应急指南》…...
通过smem 定时检测系统内存占用情况
编写定时任务脚本 cat >> /usr/local/bin/smem.sh <<-"EOF"if [[ ! -d /var/log/smem ]];thenmkdir -p /var/log/smem fi smem -tk >> /var/log/smem/smem.log EOFchmod 755 /usr/local/bin/smem.sh配置定时任务 echo "" >> /et…...
京准电钟:电厂自控NTP时间同步服务器技术方案
京准电钟:电厂自控NTP时间同步服务器技术方案 京准电钟:电厂自控NTP时间同步服务器技术方案 随着计算机和网络通信技术的飞速发展,火电厂热工自动化系统数字化、网络化的时代已经到来。一方面它为控制和信息系统之间的数据交换、分析和应用…...
Face to face
1.西班牙添加5G volte 首先carrierconfig里使能 <boolean name"carrier_nr_available_bool" value"true" /> <boolean name"carrier_volte_available_bool" value"true" /> 其次 组件apn配置ims参数 2.印度j…...
C语言中的文件操作:基础与实践
欢迎来到我的:世界 希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 ! 目录 前言内容文件文件操作:数据库文件概述:文件的打开和关闭理解流的概念文件指针 文件的打开与关闭文件的读和写文件的顺序…...
从地铁客流讲开来:十二城日常地铁客运量特征
随着城市化进程的加速和人口的不断增长,公共交通系统在现代都市生活中扮演着日益重要的角色。地铁作为高效、环保的城市交通方式,已经成为居民日常出行不可或缺的一部分。本文聚焦于2024年10月28日至12月1日期间,对包括北上广深这四个超一线城…...
VMWare 的克隆操作
零、碎碎念 VMWare 的这个克隆操作很简单,单拎出来成贴的目的是方便后续使用。 一、操作步骤 1.1、在“源”服务器上点右键,选择“管理--克隆” 1.2、选择“虚拟机的当前状态”为基础制作克隆,如下图所示,然后点击“下一页” 1.3、…...
经济学 ppt 2 部分
前言 上一次复习经济学是好久之前了,看了第一章的 ppt ,好像重点就是谁是软件经济学之父。昨天老师讲了一下题型,20 分选择题, 20 分判断题,20 分计算题,6 6 8 三个计算题,25 分表格࿰…...
R(4.4.2)的下载与安装(Windows系统)
进入官网:https://www.r-project.org/ 首先点击CRAN链接,选择一个镜像链接地址 进入CRAN所显示页面如下: 选择China下的一个镜像站点,本文选择第一个 选择windows系统下载 点击“base” 下载: 打开下载的文件 默认中文…...
一文流:JVM精讲(多图提醒⚠️)
一文流系列是作者苦于技术知识学了-忘了,背了-忘了的苦恼,决心把技术知识的要点一笔笔✍️出来,一图图画出来,一句句讲出来,以求刻在🧠里。 该系列文章会把核心要点提炼出来,以求掌握精髓,至于其他细节,写在文章里,留待后续回忆。 目前进度请查看: :::info https:/…...
C盘下的文件夹
在Windows操作系统中,C盘通常是系统安装的盘符,其中包含了许多重要的文件夹和系统文件。以下是一些常见的文件夹:系统文件夹 Windows: 包含Windows操作系统的核心文件和组件。 Program Files: 存储大多数安装的软件程序。 Program Files (x86…...
视频直播点播平台EasyDSS与无人机技术的森林防火融合应用
随着科技的飞速发展,无人机技术以其独特的优势在各个领域得到了广泛应用,特别是在森林防火这一关键领域,EasyDSS视频平台与无人机技术的融合应用更是为传统森林防火手段带来很大的变化。 一、无人机技术在森林防火中的优势 1、快速响应与高…...
通过阿里云 Milvus 与 PAI 搭建高效的检索增强对话系统
背景介绍 阿里云向量检索服务Milvus版(简称阿里云Milvus)是一款云上全托管服务,确保了了与开源Milvus的100%兼容性,并支持无缝迁移。在开源版本的基础上增强了可扩展性,能提供大规模 AI 向量数据的相似性检索服务。相…...
Unity 3D饼状图效果
一. 效果展示 二.基础类 using System.Collections; using System.Collections.Generic; using UnityEngine;public class DrawCylinder : MonoBehaviour {// 网格渲染器MeshRenderer meshRenderer;// 网格过滤器MeshFilter meshFilter;// 用来存放顶点数据List<Vector3>…...
OpenHarmony-4.HDI 框架
HDI 框架 1.HDI介绍 HDI(Hardware Device Interface,硬件设备接口)是HDF驱动框架为开发者提供的硬件规范化描述性接口,位于基础系统服务层和设备驱动层之间,是连通驱动程序和系统服务进行数据流通的桥梁,是…...
ArcGIS Pro 3.4新功能2:Spatial Analyst新特性,密度、距离、水文、太阳能、表面、区域分析
Spatial Analyst 扩展模块在 ArcGIS Pro 3.4 中引入了新功能和增强功能。此版本为您提供了用于表面和区域分析的新工具以及改进的密度和距离分析功能,多种用于水文分析的工具性能的提高,一些新的太阳能分析功能。 目录 1.密度分析 2.距离分析 3.水文…...
GitLab分支管理策略和最佳实践
分支管理是 Git 和 GitLab 中非常重要的部分,合理的分支管理可以帮助团队更高效地协作和开发。以下是一些细化的分支管理策略和最佳实践: 1. 分支命名规范 • 主分支:通常命名为 main 或 master,用于存放稳定版本的代码。 • …...
uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点
兼容H5、安卓App、微信小程序 实现逻辑:给默认选中节点的所有子节点添加一个disabled属性,以此禁用子节点。 /components/sonTreeNode/sonTreeNode.vue 封装成组件 <template><view><view :class"[item,item.is_level1?pL1:item…...
方正畅享全媒体新闻采编系统 screen.do SQL注入漏洞复现
0x01 产品简介 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、发…...
5G 模组 RG500Q常用AT命令
5G 模组 RG500Q常用AT命令 5G 模组 RG500Q常用AT命令 at ATQNWPREFCFG\"mode_pref\",nr5g && sleep 1 at ATQNWPREFCFG\"nr5g_band\",79 && sleep 1 at atqnwlock\"commo…...
day38-SSH安全登录
机器准备 什么是SSH SSH 或 Secure Shell 协议是一种远程管理协议,允许用户通过 Internet 访问、控制和修改其远程服务器。 SSH 服务是作为未加密 Telnet 的安全替代品而创建的,它使用加密技术来确保进出远程服务器的所有通信都以加密方式进行。 SS…...
U盘出现USBC乱码文件的全面解析与恢复指南
一、乱码现象初探:USBC乱码文件的神秘面纱 在数字时代,U盘已成为我们日常生活中不可或缺的数据存储工具。然而,当U盘中的文件突然变成乱码,且文件名前缀显示为“USBC”时,这无疑给用户带来了极大的困扰。这些乱码文件…...
mac iterm2 使用 lrzsz
前言 mac os 终端不支持使用 rz sz 上传下载文件,本文提供解决方法。 mac 上安装 brew install lrzsz两个脚本 注意:/usr/local/bin/iterm2-send-zmodem.sh 中的 sz命令路径要和你mac 上 sz 命令路径一致。 /usr/local/bin/iterm2-recv-zmodem.sh 中…...
京东大数据治理探索与实践 | 京东零售技术实践
01背景和方案 在当今的数据驱动时代,数据作为关键生产要素之一,其在商业活动中的战略价值愈加凸显,京东也不例外。 作为国内领先的电商平台,京东在数据基础设施上的投入极为巨大,涵盖数万台服务器、数 EB 级存储、数百…...
应该连续学一个科目,还是多学科切换?
https://www.zhihu.com/question/333420829https://www.zhihu.com/question/333420829...
游戏何如防抓包
游戏抓包是指在游戏中,通过抓包工具捕获和分析游戏客户端与服务器之间传输的封包数据的过程。抓包工具可实现拦截、篡改、重发、丢弃游戏的上下行数据包,市面上常见的抓包工具有WPE、Fiddler和Charles Proxy等。 抓包工具有两种实现方式,一类…...
asp.net core发布配置端口号,支持linux
方式一,修改配置文件 appsettings.json 找到文件 appsettings.json, 添加如下节点配置,在linux环境需要设置0.0.0.0才可以正常代表本机,然后被其他机器访问,此处设置端口8000, "Kestrel": {&quo…...
基于linux下实现的ping程序(C语言)
linux下实现的ping程序 一、设计目的 PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。 课程设…...